在Ruby中比较数组并删除重复项?
比较多个阵列并删除重复项的最简单方法是什么 所以(在这种情况下,数组中的数组) …将出现(优先顺序为数组a、b、c、d)在Ruby中比较数组并删除重复项?,ruby,arrays,compare,duplicates,Ruby,Arrays,Compare,Duplicates,比较多个阵列并删除重复项的最简单方法是什么 所以(在这种情况下,数组中的数组) …将出现(优先顺序为数组a、b、c、d) 将所有阵列放在一个大阵列中: a = [[[2, 1], [3, 3], [7, 2], [5, 6]], [[2, 1], [6, 7], [9, 9], [4, 3]], [[2, 1], [1, 1], [2, 2], [9, 9]], [[2, 1], [9, 9], [2, 2], [3, 1]]] 您可以通过以下方式实现您想要的: a.inject([]) do
将所有阵列放在一个大阵列中:
a = [[[2, 1], [3, 3], [7, 2], [5, 6]],
[[2, 1], [6, 7], [9, 9], [4, 3]],
[[2, 1], [1, 1], [2, 2], [9, 9]],
[[2, 1], [9, 9], [2, 2], [3, 1]]]
您可以通过以下方式实现您想要的:
a.inject([]) do |acc, pairs|
acc << pairs.uniq.reject{|pair| acc.flatten(1).member?(pair)}
end
它只是一个或减法,你可以这样写。运算符重载可能是一种幸事:)
a
就是这样
a
[[2, 1], [3, 3], [7, 2], [5, 6]]
b = b - a
[[6, 7], [9, 9], [4, 3]]
c = c - b - a # or c - (a + b)
[[1, 1], [2, 2]]
d = d - c - b - a # or d - (a + b + c)
[[3, 1]]
这是如何返回b1想要的结果的?例如,通过将结果分配给
a、b、c、d
。你和Anurag都给出了四个阵列的答案。我只是概括了答案,我认为这样更实用,比我的方法更优雅
a.inject([]) do |acc, pairs|
acc << pairs.uniq.reject{|pair| acc.flatten(1).member?(pair)}
end
a.inject([]) do |acc, pairs|
acc << (pairs - (acc.inject(&:+) || []))
end
a
[[2, 1], [3, 3], [7, 2], [5, 6]]
b = b - a
[[6, 7], [9, 9], [4, 3]]
c = c - b - a # or c - (a + b)
[[1, 1], [2, 2]]
d = d - c - b - a # or d - (a + b + c)
[[3, 1]]