我有一个数组
animals = [
[{"name" => "Alex", "spices" => "dog", "vname" => "colour", "value" => "black"},
{"name" => "Alf", "spices" => "dog", "vname" => "colour", "value" => "white"},
{"name" => "Sonia", "spices" => "dog", "vname" => "colour", "value" => "white"}],
[{"name" => "Alex", "spices" => "dog", "vname" => "health", "value" => "80"},
{"name" => "Alf", "spices" => "dog", "vname" => "health", "value" => "98"}],
[{"name" => "Alex", "spices" => "dog", "vname" => "age", "value" => "12"}]
]
每只动物(Alex、Alf 和 Sonia)都通过颜色、健康状况和年龄(vname 值)进行描述,但 Alf 在第三个子数组中没有年龄的哈希值,Sonia 没有健康状况的哈希值(第二个子数组)和年龄(第三个子数组)。我想检查是否有任何子数组没有某些狗的“vname”对,如果不添加这样的哈希
{"name" => "Alf", "spices" => "dog", "vname" => "age", "value" => "unknown"}
获取数组
animals = [
[{"name" => "Alex", "spices" => "dog", "vname" => "colour", "value" => "black"},
{"name" => "Alf", "spices" => "dog", "vname" => "colour", "value" => "white"},
{"name" => "Sonia", "spices" => "dog", "vname" => "colour", "value" => "white"}],
[{"name" => "Alex", "spices" => "dog", "vname" => "health", "value" => "80"},
{"name" => "Alf", "spices" => "dog", "vname" => "health", "value" => "98"},
{"name" => "Sonia", "spices" => "dog", "vname" => "health", "value" => "unknown"}],
[{"name" => "Alex", "spices" => "dog", "vname" => "age", "value" => "12"},
{"name" => "Alf", "spices" => "dog", "vname" => "age", "value" => "unknown"},
{"name" => "Sonia", "spices" => "dog", "vname" => "age", "value" => "unknown"}]
]
你能帮我解决这个问题吗?
最佳答案
嗯。在数组中设置名称。循环遍历您的 animals
数组,并针对其中的每个数组,检查是否具有所有动物名称的哈希值。为那些缺失的哈希值添加默认哈希值。
animal_names = ["Alex", "Alf", "Sonia"]
animals.each do |animals_by_vname|
vname = animals_by_vname.first["vname"]
names_present = animals_by_vname.map {|i| i["name"]}
names_missing = animal_names - names_present
names_missing.each do |name|
animals_by_vname << {
"name" => name,
"spices" => "dog",
"vname" => vname,
"value" => "unknown"
}
end
end
puts animals # should be you wanted it.
这解决了你的问题。
但是,老实说,我认为数据结构需要优化。也许有一个以动物名称作为键的数组散列。喜欢:
{
"Alex": { health: "good" }
"Alf": { age: 10, health: "good" }
}
关于arrays - 如何检查任何子数组是否不包含其他子数组中的项目? ruby ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44941014/