arrays - 如何检查任何子数组是否不包含其他子数组中的项目? ruby

标签 arrays ruby sub-array

我有一个数组

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/

相关文章:

ruby - 这个示例 tcp 套接字编程事件顺序安全吗?

python-3.x - 最大和子数组python

python - Numpy 独特的二维子数组

java - 为什么我的代码运行在无限循环中?将两个不同文件中的内容放入两个数组中

c# - 我想从用户那里获取请求的整数数量并将它们存储到一个数组中

ruby-on-rails - 为什么要在数据库主机上保留应用程序的副本?

javascript - 如何向子数组添加新属性?

c - 字符串数组相互覆盖?

jquery - 我需要从 'Datatables plugin for jQuery' 表的 JSON 数据创建一个二维数组

ruby - 使用递归查找等于给定数字的总和和乘积序列