[[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
的阵列工作是数组如何使用哈希
我怎么能得到对应于特定值的值。
说高回报在这个5。 或如何将这个散列数组转换为数组,以便搜索变得容易。
我想:
find_all { |v| v['name'] == "Low" }
但它说:
cant convert String to Integer
请提供一些指导
[[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
的阵列工作是数组如何使用哈希
我怎么能得到对应于特定值的值。
说高回报在这个5。 或如何将这个散列数组转换为数组,以便搜索变得容易。
我想:
find_all { |v| v['name'] == "Low" }
但它说:
cant convert String to Integer
请提供一些指导
如果你有一些这样的代码:
array = [[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]]
然后把它变成一个红宝石哈希:
hash = array.inject({}) {|h, e| h.merge(e.first) }
# => {"Postponed"=>10, "Low"=>3, "Medium"=>4, "High"=>5}
所以,你可以很容易地找到 '低' 值:
hash['Low']
# => 3
编辑:马克托马斯的答案是相当伟大的,一个d比注射更短,因为它做同样的事情。他在我回答之前写下了它。尼斯;)
这个怎么样?
arr = [
[{"Postponed"=>10}],
[{"Low"=>3}],
[{"Medium"=>4}],
[{"High"=>5}]
]
arr1 = []
arr.each{|a|
arr1.push(a[0])
}
虽然我不知道你真的只是想获得一个哈希,你会做像这样:
myHash = {}
arr.each{|a|
a[0].each{|b, c|
myHash[b] = c
}
}
你会然后像myHash["Postponed"]
然后如何获得arr1中的键值? – 2012-01-27 14:08:04
我意识到这一点。我想你会更好用散列(请参阅我的后续编辑)。我只提供了arr1,因为你最初需要一个数组。 – SimonMayer 2012-01-27 14:12:41
thnx西蒙为您的快速反应! – 2012-01-27 18:09:54
访问它在一般情况下, ,哈希将不是唯一的,所以您需要过滤而不是通过索引选择一个。例如,假设你有这样的:
现在让我们假设你想获得对应于任何散列与:coconut
键的值。然后,只需使用:
arr.flatten.map { |h| h[:coconut] }.compact
# => ["ghi"]
给出答案列表。在这种情况下,只有一个匹配键,所以数组中只有一个条目。如果还有其他的哈希值是有一个:在有椰子键,那么你就会有这样的:
# => ["ghi", "jkl", "mno"]
就整体而言,虽然,这是一个非常不寻常的数据结构有。如果你控制结构,那么你应该考虑使用可以按照你喜欢的方式返回合理答案的对象,而不是哈希。
好吧,thnx很多@John ..它的工作。你也可以告诉我如何改变结构。在你的例子中说,我想将arr转换为这样的[{:apple =>'abc'},{:banana =>'def'}] ..我的意思是正常散列而不是散列阵列 – 2012-01-27 14:13:09
你的榜样仍然是一组哈希值。 (原始结构是散列数组。)您可以通过'arr.flatten'获得刚刚描述的内容。 – 2012-01-27 14:39:47
你可以简单地调用#flatten
原来阵列上。那会给你一些散列。我认为你真的想要的只是一个散列。
1.8.7 :006 > [[{"Postponed"=>10}], [{"Low"=>3}], [{"Medium"=>4}], [{"High"=>5}]].flatten
=> [{"Postponed"=>10}, {"Low"=>3}, {"Medium"=>4}, {"High"=>5}]
我会问,你在做什么来获得原始结构?这可以改变吗?
thnx Thanatos !! – 2012-01-27 18:09:25
如何做一个散列出来的高效支持?
arr.flatten.reduce(:merge)
#=> {"Postponed"=>10, "Low"=>3, "Medium"=>4, "High"=>5}
thnx马克,你的答案是有用的:) – 2012-01-27 18:08:39
最好的解决方案(恕我直言)是改变如何创建结构。你有能力做到这一点吗? – 2012-01-27 14:06:42
是的马克我有能力做到这一点,你能指导我通过吗? – 2012-01-27 14:10:43
嗅觉像一个正常的散列:'status = {“Postponed”=> 10,“Low”=> 3,“Medium”=> 4,“High”=> 5} – dgasper 2012-01-27 14:12:41