使用delete_if删除哈希的单个值而不是整个哈希RUBY

时间:2016-09-15 12:08:42

标签: ruby

我有一个数组

array_hash = [
  {
    "array_value" => 1,
    "other_values" => "whatever",
    "inner_value" => [
      {"iwantthis" => "forFirst"},
      {"iwantthis2" => "forFirst2"},
      {"iwantthis3" => "forFirst3"}
    ]
  },
  {
    "array_value" => 2,
    "other_values" => "whatever2",
    "inner_value" => [
      {"iwantthis" => "forSecond"},
      {"iwantthis2" => "forSecond2"},
      {"iwantthis3" => "forSecond3"}
    ]
  },
]

我想删除内部值或弹出它(我更喜欢pop)。 所以我的输出应该是这样的:

array_hash = [
  {
    "array_value" => 1,
    "other_values" => "whatever"
  },
  {
    "array_value" => 2,
    "other_values" => "whatever2"
  },
]

我尝试了delete_if

array_hash.delete_if{|a| a['inner_value'] }

但它删除了数组中的所有数据。有没有解决方案?

3 个答案:

答案 0 :(得分:1)

试试这个:

array_hash.map{ |a| {'array_value' => a['array_value'], 'other_values' => a['other_values'] }}

答案 1 :(得分:1)

您告诉ruby删除所有具有名为 inner_value 键的哈希值。这就解释了为什么阵列仍然是空的。

你应该做的是:

array_hash.each { |x| x.delete 'inner_value' }

表示:对于此数组中的每个哈希,请删除 inner_value 键。

答案 2 :(得分:1)

我找到了,

array_hash_popped = array_hash.map{ |a| a.delete('inner_value') }

这将弹出(因为我想要问题中所述的pop)inner_value out,因此内部值将从array_hash中减少/删除。