首页 > 解决方案 > 获取二维数组之间的差异

问题描述

我在使用二维数组来获取一个数组中存在而另一个数组中不存在的值时遇到了麻烦。

我们有 2 个数组

[["001", 1, 3333, "maja", "eka", 17, "110B"], ["005", 1, 1434, "buve", "eka", 27, "110A"], ["008", 1, 1111, "maja", "", 31, "110"]]

而第二个

[["001", 1, 3333, "maja", "eka", 17, "110B"], ["007", 1, 3381, "buve", "eka", 31, "110"], ["009", 1, 2824, "maja", "", 28, "110C"]]

所以输出应该是

[["007", 1, 3381, "buve", "eka", 31, "110"], ["009", 1, 2824, "maja", "", 28, "110C"]]

Atm 我正在这样做,但我很挣扎,因为它只返回 1 条记录

detect = []
records = first_array.collect {|a| a[0]} - second_array.collect {|a| a[0]}
    records.each do |r|
      detect = first_array.detect { |k, v| k == r }
    end
return detect

标签: ruby-on-railsarraysruby

解决方案


您可以使用-运算符

a = [["001", 1, 3333, "maja", "eka", 17, "110B"], ["005", 1, 1434, "buve", "eka", 27, "110A"], ["008", 1, 1111, "maja", "", 31, "110"]]
b = [["001", 1, 3333, "maja", "eka", 17, "110B"], ["007", 1, 3381, "buve", "eka", 31, "110"], ["009", 1, 2824, "maja", "", 28, "110C"]]

# You can find the difference between the arrays with - operator
a - b 
#~> [["005", 1, 1434, "buve", "eka", 27, "110A"], ["008", 1, 1111, "maja", "", 31, "110"]]
b - a 
#~> [["007", 1, 3381, "buve", "eka", 31, "110"], ["009", 1, 2824, "maja", "", 28, "110C"]]

推荐阅读