由于某种原因,以下代码生成具有重复值的集合.
我不确定如何定义 ruby中数组的唯一性,所以这可能是某种可预期的?
我不确定如何定义 ruby中数组的唯一性,所以这可能是某种可预期的?
require 'set' xs = [1,2,3] xss = Set.new [] xs.each do |x| xss.merge xss.to_a.map{|xs| xs.push x} xss.add [x] p xss end
会打印
#<Set: {[1]}> #<Set: {[1,2],[1,[2]}> #<Set: {[1,3,3],[2,[3]}>
怎么了?
编辑
将xs.push x更改为xs [x]将修复它.
解决方法
您正在有效地更改集合中的对象,这是不允许的.
Set assumes that the identity of each element does not change while it is stored. Modifying an element of a set will render the set to an unreliable state.
关于你的comment
I want
#<Set: {[1],[2],[3]}>
你可以使用Array#combination
:
a = [1,3] (1..a.size).flat_map { |n| a.combination(n).to_a } #=> [[1],[3],3]]