Сравните 2 разных массива с одним и тем же индексатором, но разным количеством значений в - PullRequest
1 голос
/ 23 сентября 2019

ищет вашей помощи.

У меня есть 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 ]

1 голос
/ 23 сентября 2019

Попробуйте это:

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]
    ]
0 голосов
/ 23 сентября 2019

assoc хорош для этого:

p b.map{|ar| a.assoc(ar.first)}
0 голосов
/ 23 сентября 2019

Кажется, что элементы a отличаются от элементов b тем, что в качестве последнего элемента указана строка больше.

Таким образом, вы можете просто Array # reject! сравниватьвесь элемент b:

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

Но если только первый элемент каждого вложенного массива является сигналом, отображение b на первый элемент перед и затем отклонение элементов на основе этой карты является правильнымway.

Обратите внимание, что Array # reject!влияет на исходный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...