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]