如何用初始值作为键散列,并用块生成键值数组?
- 内容介绍
- 文章标签
- 相关推荐
本文共计325个文字,预计阅读时间需要2分钟。
我有一个数组:[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}
本文共计325个文字,预计阅读时间需要2分钟。
我有一个数组:[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}

