根据哈希中的键将值拆分为单独的数组?

Nar*_*ker -1 ruby

我有这样的事情

[
  {
    "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].怎么做到这一点?

Kyl*_*cot 6

你可以在这里使用转置:

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)