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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...