比较两个具有相同索引器但值不同的数组

时间:2019-09-23 10:29:31

标签: ruby-on-rails ruby

寻求帮助。

我确实有2个数组

a = [["01000340001001", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 27, "Aleksandra ─īaka iela 110, R─½ga"], ["01000340002001", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 15, "Aleksandra ─īaka iela 108, R─½ga"], ["01000340002002", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 4, "Aleksandra ─īaka iela 108, R─½ga"], ["01000340002005", 0, 1252, "Noliktavas, rezervu─üri, bunkuri un silosi", "Noliktava", 1, "Aleksandra ─īaka iela 108B, R─½ga"], ["01000340002006", 0, 1252, "Noliktavas, rezervu─üri, bunkuri un silosi", "Noliktava", 1, "Aleksandra ─īaka iela 108, R─½ga"], ["01000340002006", 0, 1252, "Noliktavas, rezervu─üri, bunkuri un silosi", "Noliktava", 1, "Aleksandra ─īaka iela 108B, R─½ga"], ["01000340002008", 0, 1274, "Citas, iepriek┼Ī neklasific─ōtas, ─ōkas", "Nojume", 0, nil]]

另一个

b = [["01000340002001", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 15], ["01000340002002", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 4], ["01000340002006", 0, 1252, "Noliktavas, rezervu─üri, bunkuri un silosi", "Noliktava", 1]]

我需要按照我的想法从a中删除索引器在b中的那些数组(例如,删除重复项)。

我正在尝试的是这样做

all = []
all = a.collect {|key, value | key} - b.collect {|key, value | key}
# ["01000340002005", "01000340001001", "01000340002008"]

然后选择我需要的数组

a.select { |key, value| key == b }
# ["01000340002008", 0, 1274, "Citas, iepriek┼Ī neklasific─ōtas, ─ōkas", "Nojume", 0, nil]

结果我只能得到1个数组,但应该是3个。

有人可以建议我如何使其工作吗? :)

3 个答案:

答案 0 :(得分:1)

尝试一下:

b_indexes = b.map(&:first)
a.delete_if { |arr| b_indexes.include?(arr.first) }
#~> [
      ["01000340001001", 0, 1122, "Triju vai vair─üku dz─½vok─╝u m─üjas", "Dz─½vojam─ü ─ōka", 27, "Aleksandra ─īaka iela 110, R─½ga"],
      ["01000340002005", 0, 1252, "Noliktavas, rezervu─üri, bunkuri un silosi", "Noliktava", 1, "Aleksandra ─īaka iela 108B, R─½ga"],
      ["01000340002008", 0, 1274, "Citas, iepriek┼Ī neklasific─ōtas, ─ōkas", "Nojume", 0, nil]
    ]

答案 1 :(得分:0)

a的元素似乎与b的元素不同,因为最后一个元素多了一个字符串。

因此,您可以Array#reject!比较b的整个元素:

a.reject! { |e| b.include? e[0...-1] }

但是,如果只有每个嵌套数组的第一个元素是信号,则将b映射到之前的第一个元素,然后根据该映射拒绝元素是正确的方法。

请注意Array#reject!影响原始数组。

答案 2 :(得分:0)

assoc很适合:

p b.map{|ar| a.assoc(ar.first)}