1

looking for your help.

I do have 2 arrays

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]]

Another one

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]]

I need to remove from a those arrays, that are in b by indexers as i think(e.g. remove duplicated).

What i was trying is to do this

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

And then select arrays that i need

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

As outcome i get only 1 array, but should 3.

Could someone please suggest me how to make it work? :)

3 Answers 3

1

Try this:

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]
    ]
Sign up to request clarification or add additional context in comments.

Comments

0

It seems that elements of a differs from elements of b for having a string more as last element.

So, you could just Array#reject! comparing the whole element of b:

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

But if only the first element of each nested array is the signal, mapping b against the first element before and then rejecting elements based on that map is the correct way.

Note that Array#reject! affects the original array.

Comments

0

assoc is nice for this:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.