用键数组过滤哈希数组 ruby

问题描述 投票:0回答:1
arr = [
  {
    :id=>2,
    :start=> "3:30",
    break: 30,
    num_attendees: 14
  },
  {
    id: 3,
    start: "3: 40",
    break: 40,
    num_attendees: 4
  },
  {
    id: 4,
    start: "4: 40",
    break: 10,
    num_attendees: 40
  }
]

当我进行以下操作时

arr.map do |hash|
 [ hash[:id], hash[:start] ]
end

返回

#=> [[2, "3:30"], [3, "3: 40"], [4, "4: 40"]]

有没有一种优雅而有效的方式来传递一个类似于 return_keys = [:id, :start] 并得到相同的上述值,而不是在内部硬编码的 array.map

arrays ruby hash
1个回答
1
投票

你认为下面的做法是否优雅而有效?

arr.map { |h| h.values_at(:id, :start) }
#=> [[2, "3:30"], [3, "3: 40"], [4, "4: 40"]]

arr.map { |h| h.values_at(*return_keys) }
#=> [[2, "3:30"], [3, "3: 40"], [4, "4: 40"]]

1
投票

我觉得下面的内容很有表现力

keys = [:id, :start]
arr.map {|hash| hash.slice(*keys).values}

slice 方法只返回一个包含作为参数传递的键的哈希值(前面有*运算符,以将数组转换为关键字参数,避免硬编码)。然后,该 values 方法只得到哈希中的值。

© www.soinside.com 2019 - 2024. All rights reserved.