当前位置 : 主页 > 编程语言 > ruby >

arrays – 使用初始值作为键来散列数组,使用块来生成键值

来源:互联网 收集:自由互联 发布时间:2021-06-23
说我有一个数组: a = [1, 2, 3] 我想创建一个散列,其中每个数组元素都是一个键,并且值是一个块的输出,使用这些元素中的每一个作为块变量调用: { 1 = 4, 2 = 5, 3 = 6 } 我可以使用map和to
说我有一个数组:

a = [1, 2, 3]

我想创建一个散列,其中每个数组元素都是一个键,并且值是一个块的输出,使用这些元素中的每一个作为块变量调用:

{ 1 => 4, 2 => 5, 3 => 6 }

我可以使用map和to_h来做到这一点:

a.map{ |n| [n, n + 3] }.to_h

#=> {1=>4, 2=>5, 3=>6}

有没有一种方法可以做到这一点?例如,如果它被称为hash_with,我将能够写:

a.hash_with{|n| n + 3}

#=> {1=>4, 2=>5, 3=>6}
没有(Ruby缺乏将Enumerables变为Hashes的方法),但编写自己的方法非常简单:

module Enumerable
  def hash_with
    each_with_object({}) {|elm, hsh| hsh[elm] = yield(elm) }
  end
end

[1,2,3].hash_with {|n| n + 3 }
# => { 1 => 4, 2 => 5, 3 => 6 }

('a'..'e').hash_with(&:upcase)
# => { "a" => "A", "b" => "B", "c" => "C", "d" => "D", "e" => "E" }

(:A..:E).hash_with { rand 100 }
# => { A: 28, B: 67, C: 58, D: 12, E: 20}
网友评论