Ruby range.reduce与哈希累加器
发布时间:2020-12-17 03:50:21 所属栏目:百科 来源:网络整理
导读:我有这个方法 def heights (60..68).reduce({}) { |h,i| h.merge!( { %(#{i/12}'#{i%12}") = i } ) }end 它返回高度的哈希值 { "5'0"" = 60,"5'1"" = 61,"5'2"" = 62,"5'3"" = 63,"5'4"" = 64,"5'5"" = 65,"5'6"" = 66,"5'7"" = 67,"5'8"" = 68} 这
我有这个方法
def heights (60..68).reduce({}) { |h,i| h.merge!( { %(#{i/12}'#{i%12}") => i } ) } end 它返回高度的哈希值 { "5'0"" => 60,"5'1"" => 61,"5'2"" => 62,"5'3"" => 63,"5'4"" => 64,"5'5"" => 65,"5'6"" => 66,"5'7"" => 67,"5'8"" => 68 } 这就是我想要的.但是,我不喜欢使用合并!方法.我更倾向于使用hash [key] = value语法进行赋值: def heights (60..68).reduce({}) { |h,i| h[%(#{i/12}'#{i%12}")] = i } end 但是这段代码会抛出错误.我知道使用reduce,在你的管道中你可以命名你的累加器和元素. 我也明白这一点 sum = 0 (1..5).each { |i| sum += i } 相当于 (1..5).reduce(0) { |sum,i| sum + i } 那么为什么不这样呢 hash = {} (1..5).each { |i| hash[i.to_s] = i } 工作相同 (1..5).reduce({}) { |hash,i| hash["#{i}"] = i } 解决方法
减少块应该返回新的累加器.在你的情况下
(1..5).reduce({}) { |hash,i| hash["#{i}"] = i } block返回i,这是一个整数,因此在第二次迭代时,您将尝试在整数上调用[].你需要它: (1..5).reduce({}) { |hash,i| hash["#{i}"] = i; hash } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |