我有一个数组数组,如下所示:
aa = [ [a,d], [a,d1], [a,d], [b,d], [b,d2], [b,d3], [b,d2], [a,d2] ]
我想拥有一个独特的数组数组,而不仅仅是第一个元素 - 我可以通过像aa.uniq(&:first)那样做 - 但是如果BOTH值匹配则删除内部数组。结果将是:
aa = [ [a,d], [a,d1], [a,d2], [b,d], [b,d2], [b,d3] ]
有人可以协助我指出一种有效的方法吗?我有大量的数组 - 大约100万 - 我需要处理。
任何帮助表示赞赏!约翰
答案 0 :(得分:2)
如果您需要维护元素的集合,其中每个元素都是唯一的,并且它们的顺序并不重要。你应该使用Set。例如,
require 'set'
my_set = Set.new
my_set << [1, 'a']
my_set << [1, 'a']
my_set << [1, 'b']
my_set.each { |elem| puts "#{elem}" }
它会给你
[1, "a"]
[1, "b"]
如果订单很重要,请使用您阵列上的uniq!
aa.uniq!
答案 1 :(得分:0)
试试这样:
aa = [ ["a","d"], ["a","d1"], ["a","d"], ["b","d"] ]
aa.uniq
aa=[["a", "d"], ["a", "d1"], ["b", "d"]]
你错过了双引号(“)。在数组内部,变量a,d,a,d1等是字符串。所以,你应该将它们放在双引号(”“)中。
答案 2 :(得分:0)
如果你想从数组中获取唯一元素,这将删除重复元素,你可以试试这个:
a = [[1, 2], [2, 3], [1, 2], [2, 3], [3, 4]]
a & a #=> [[1, 2], [2, 3], [3, 4]]