我有这样的事情
[
{
"key": "55ffee8b6a617960010e0000",
"doc_count": 1
},
{
"key": "55fff0376a61794e190f0000",
"doc_count": 1
},
{
"key": "55fff0dd6a61794e191f0000",
"doc_count": 1
}
]
Run Code Online (Sandbox Code Playgroud)
我想将:key值和:doc_count值分成单独的数组,如
["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
Run Code Online (Sandbox Code Playgroud)
并喜欢[1,1,1].怎么做到这一点?
你可以在这里使用转置:
keys, doc_counts = array_of_hashes.map(&:values).transpose
Run Code Online (Sandbox Code Playgroud)
正如D-side指出的那样,这取决于每个哈希的键的顺序是相同的.如果您无法确保这一点(例如,您的数据是通过API创建的),则必须执行对哈希键进行排序的附加步骤.这看起来像是这样的:
keys, doc_counts = array_of_hashes.map{|h| Hash[h.sort].values }.transpose
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,你最终会得到类似的东西:
keys # => ["55ffee8b6a617960010e0000", "55fff0376a61794e190f0000", "55fff0dd6a61794e191f0000"]
doc_counts # => [1, 1, 1]
Run Code Online (Sandbox Code Playgroud)