0

我有一个数组数组,如下所示:

aa = [ [a,d], [a,d1], [a,d], [b,d], [b,d2], [b,d3], [b,d2], [a,d2] ]

我想拥有一个唯一的数组数组,而不仅仅是在第一个元素上——我可以通过执行类似 aa.uniq(&:first) 的操作来做到这一点——而是在两个值匹配时删除内部数组。所以结果是:

aa = [ [a,d], [a,d1], [a,d2], [b,d], [b,d2], [b,d3] ]

任何人都可以帮助我指出一种有效的方法吗?我有大量数组 - 大约 100 万 - 我需要处理。

任何帮助表示赞赏!约翰

4

3 回答 3

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!
于 2013-05-10T07:13:46.503 回答
0

试试这样:

aa = [ ["a","d"], ["a","d1"], ["a","d"], ["b","d"] ]
aa.uniq
aa=[["a", "d"], ["a", "d1"], ["b", "d"]]

你错过了双引号(“)。在数组内部,变量a,d,a,d1等是字符串。所以,你应该把它们放在双引号(“”)里面。

于 2013-05-10T07:16:14.220 回答
0

如果你想从数组中获取唯一元素,这将删除重复元素,你可以试试这个:

a = [[1, 2], [2, 3], [1, 2], [2, 3], [3, 4]]
a & a #=> [[1, 2], [2, 3], [3, 4]]
于 2017-09-24T02:18:59.627 回答