ruby套装不是唯一的

前端之家收集整理的这篇文章主要介绍了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]将修复它.

解决方法

您正在有效地更改集合中的对象,这是不允许的.

documentation

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]]

猜你在找的Ruby相关文章