将范围1..10
转换为以下格式的散列的最简单方法是什么?Ruby/Rails:将范围转换为散列
{
1 => '£1',
2 => '£2',
# ...
}
我试图与map
这样做,但散列的数组,而不是单一的散列结束。
谢谢。
将范围1..10
转换为以下格式的散列的最简单方法是什么?Ruby/Rails:将范围转换为散列
{
1 => '£1',
2 => '£2',
# ...
}
我试图与map
这样做,但散列的数组,而不是单一的散列结束。
谢谢。
Hash[(1..10).map { |num| [num, "£#{num}"] }]
或
(1..10).inject({}) { |hash, num| hash[num] = "£#{num}"; hash }
或Ruby 1.9的
(1..10).each_with_object({}) { |num, hash| hash[num] = "£#{num}" }
如何:
h = {}
(1..10).each {|x| h[x] = "£#{x}"}
简单的经验法则 - 每次你声明一个空值(散列或数组),然后遍历集合来填充/求和它 - 使用'inject' – iafonov
@ iafonov..for数组,你可以使用'map'。 – rubyprince
@iafonov我意识到这是一个旧的帖子,但我看到了你的评论(我是Ruby的新手),它只是让我想知道为什么*你应该使用'inject'。我并不是说这是错的或什么,我只是想了解它背后的原因,因为上面的'each'方法很容易阅读和理解 - 据我了解,这项工作。 – Thor84no
另一种方式
h = Hash.new { |hash, key| hash[key] = "£#{key}" }
每一个元素都会有相应的价值hovever也会给h[100]
回应什么可能导致错误
方法,如'each_with_object'提醒我,我是多么爱红宝石! +1 –
完美,谢谢! – gjb
需要SWITCH | hash,num |到| num,hash |在最后一个例子中...否则得到NoMethodError:undefined方法'[] ='为1:Fixnum – jpwynn