没有'each`的ruby哈希迭代

时间:2013-01-09 18:20:04

标签: ruby

我有一个ruby hash a,如下所示:

a = {
      "module" => 'students',
      "data" => [
        {
          "age" => 12,
          "uid" => 'sd3wrew'
        },
        {
          "age" => 10,
          "uid" => '43e43r'
        },
        {
          "age" => 10,
          "uid" => 'ft34f'
        }
      ]
    }

我想从上面的哈希中收集所有uid并得到一个类似的数组:

b = ['sd3wrew', '43e43r', 'ft34f']

所以,我有代码来执行此操作,循环遍历它。

b = []
a['data'].each do |e|
  b << e['uid']
end

无论如何在没有循环each且简洁明了的情况下实现此结果?

2 个答案:

答案 0 :(得分:8)

您正在寻找名为"map."

的函数式编程概念
b = a['data'].collect {|e| e['uid'] }
# or
b = a['data'].map {|e| e['uid'] }

http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-map

答案 1 :(得分:-2)

如果密钥与uid相等,则会在哈希中打印每个密钥:

b = a["data"].each_key { |e| print e if e='uid' }