Ruby 根据散列中的键将值拆分为单独的数组?
我有一些像这样的东西Ruby 根据散列中的键将值拆分为单独的数组?,ruby,Ruby,我有一些像这样的东西 [ { "key": "55ffee8b6a617960010e0000", "doc_count": 1 }, { "key": "55fff0376a61794e190f0000", "doc_count": 1 }, { "key": "55fff0dd6a61794e191f0000", "doc_count": 1 } ] 我想将:key值和:doc\u count
[
{
"key": "55ffee8b6a617960010e0000",
"doc_count": 1
},
{
"key": "55fff0376a61794e190f0000",
"doc_count": 1
},
{
"key": "55fff0dd6a61794e191f0000",
"doc_count": 1
}
]
我想将:key
值和:doc\u count
值分离到单独的数组中,如
["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
就像
[1,1,1]
。如何实现这一点?您可以迭代并将其分配给新数组doc\u counts
和键
array = [{"key"=>"55ffee8b6a617960010e0000", "doc_count"=>1}, {"key"=>"55fff0376a61794e190f0000", "doc_count"=>1}, {"key"=>"55fff0dd6a61794e191f0000", "doc_count"=>1}]
doc_counts, keys = [],[]
array.each do |a|
doc_counts << a["doc_count"]
keys << a["key"]
end
或
doc_counts = []
keys = array.map do |a|
doc_counts << a["doc_count"]
a["key"]
end
doc_counts=[]
keys=array.map do | a|
文档计数您可以使用其中一些
a = [
{
"key" => "55ffee8b6a617960010e0000",
"doc_count" => 1
},
{
"key" => "55fff0376a61794e190f0000",
"doc_count" => 1
},
{
"key" => "55fff0dd6a61794e191f0000",
"doc_count" => 1
}
]
一,
二,
您可以在此处使用:
正如D-side
指出的,这取决于每个散列的键顺序相同。如果无法确保这一点(例如,您的数据是通过API创建的),则必须执行额外的步骤,对哈希键进行排序。这看起来像:
keys, doc_counts = array_of_hashes.map{|h| Hash[h.sort].values }.transpose
keys # => ["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
doc_counts # => [1, 1, 1]
在任何一种情况下,您都会得到如下结果:
keys, doc_counts = array_of_hashes.map{|h| Hash[h.sort].values }.transpose
keys # => ["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
doc_counts # => [1, 1, 1]
在不创建新数组的情况下,doc\u counts,key=[],[]
是否可以这样做?显然,您需要两个新数组作为结果。你也可以使用map
更改输入数组本身。但同样,您需要创建另一个数组来容纳其他值集。请注意,它依赖于散列中键的顺序。比如说,如果第3-4行被交换,结果就会不同。
keys, doc_counts = array_of_hashes.map(&:values).transpose
keys, doc_counts = array_of_hashes.map{|h| Hash[h.sort].values }.transpose
keys # => ["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
doc_counts # => [1, 1, 1]