在Ruby中将字符串数组转换为字符串和浮点的散列?

在Ruby中将字符串数组转换为字符串和浮点的散列?,ruby,hash,Ruby,Hash,我有以下数组 >> gold_prices => [["2011-01-11", "134.91"], ["2011-01-10", "134.12"], ["2011-01-07", "133.58"], ["2011-01-06", "133.83"]] 将每个子数组转换为:string=>float的散列最干净的方法是什么?对于使用一个键的4个散列,您可以执行以下操作: >> gold_prices = Hash[gold_prices.map {

我有以下数组

>> gold_prices

=> [["2011-01-11", "134.91"], ["2011-01-10", "134.12"], 
   ["2011-01-07", "133.58"], ["2011-01-06", "133.83"]]

将每个子数组转换为:string=>float的散列最干净的方法是什么?

对于使用一个键的4个散列,您可以执行以下操作:

>> gold_prices = Hash[gold_prices.map {|date, price| [date, price.to_f]}]

=> {"2011-01-11" => 134.91, "2011-01-10" => 134.12,
    "2011-01-07" => 133.58, "2011-01-06" => 133.83}
gold_prices.collect { |item| { item.first => item.last.to_f } }

您想要4个带1个键的散列还是1个带4个键的散列?在本例中,一个散列包含四个键、值对。“date”是字符串键,“price”是浮点值。提供所需结果的示例总是很有帮助的。这将有助于避免像Skilldrick这样的问题。@TinMan,将来也可以。非常好-我不知道这种语法!在我编辑我的问题以生成您创建的哈希之前,您得到了一个清晰的答案。非常感谢。可能没什么大不了的,但是请注意,这个特殊的表单只适用于Ruby 1.8.7+;对于早期版本,您需要
Hash[*foo.map{…}.flatte]
@Phrogz现在有一个*foo C-pointer-looking-syntax工件,或者它仍然在Ruby 1.8.7+中使用?@Milktrader
Hash。[]
还接受偶数个参数:
Hash[1,2,3,4]#=>{1=>2,3=>4}
。“C指针语法”在Ruby中称为“splat”。在这里,它接受一个值数组,并将它们作为单独的参数传递给一个方法。Ruby 1.8.7/1.9添加了在这里的答案中看到的更方便的形式,现在它也可以采用一个由两个值数组组成的数组。引号需要是一个float。谢谢,这很容易纠正。
#!/usr/bin/env ruby

gold_prices = [["2011-01-11", "134.91"], ["2011-01-10", "134.12"], 
  ["2011-01-07", "133.58"], ["2011-01-06", "133.83"]]

h = {}
gold_prices.each { | date, quote | h[date] = quote.to_f }

p h
# {"2011-01-06"=>133.83, "2011-01-07"=>133.58, ...