arr1 = [
[["name", "Alex"],["age", "4"], ["width", "55"], ["weight", "30"],
["species", "Alex"], ["female", "yes"], ["group"]],
[["name", "All"],["age", "7"], ["width", "26"], ["weight", "3"],
["species", "cat"], ["female", "no"], ["group"]]
]
arr2 = [["A23", "All", "Katy", "Max"], ["B23", "Sisi", "Alex"]]
Вот способ, который позволяет элементы каждого элемента arr1
быть в любом порядке и поддерживает этот порядок после изменения элемента, содержащего "group"
.
h2 = arr2.each_with_object({}) { |(first,*rest),h| rest.each { |s| h[s] = first } }
#=> {"All"=>"A23", "Katy"=>"A23", "Max"=>"A23", "Sisi"=>"B23", "Alex"=>"B23"}
arr1.map do |a|
h = a.each_with_object({}) { |(k,v),h| h[k]=v }
h["group"] = h2[h["name"]]
h.to_a
end
#=> [[["name", "Alex"], ["age", "4"], ["width", "55"], ["weight", "30"],
# ["species", "Alex"], ["female", "yes"], ["group", "B23"]],
# [["name", "All"], ["age", "7"], ["width", "26"], ["weight", "3"],
# ["species", "cat"], ["female", "no"], ["group", "A23"]]]
Использование Array#map
если arr1
не будет мутировали.
Расчет блока для первого из двух элементов arr1
выглядит следующим образом.
a = arr1.first
#=> [["name", "Alex"], ["age", "4"], ["width", "55"], ["weight", "30"],
# ["species", "Alex"], ["female", "yes"], ["group"]]
h = a.each_with_object({}) { |(k,v),h| h[k]=v }
#=> {"name"=>"Alex", "age"=>"4", "width"=>"55", "weight"=>"30",
# "species"=>"Alex", "female"=>"yes", "group"=>nil}
v = h["name"]
#=> "Alex"
h["group"] = h2[v]
#=> h2["Alex"] => "B23"
h #=> {"name"=>"Alex", "age"=>"4", "width"=>"55", "weight"=>"30",
# "species"=>"Alex", "female"=>"yes", "group"=>"B23"}
h.to_a
#=> [["name", "Alex"], ["age", "4"], ["width", "55"], ["weight", "30"],
# ["species", "Alex"], ["female", "yes"], ["group", "B23"]]
Расчет аналогичен для второго элемента arr1
.
Вам действительно нужно использовать эту структуру данных? Это было бы намного лучше представлено хэш-объектом. –
К сожалению, да ... – mila002
Что вы попробовали? –