【问题标题】:How to combine array of hashes into one array?如何将哈希数组组合成一个数组?
【发布时间】:2021-11-24 21:36:28
【问题描述】:

我正在尝试像这样组合一个哈希数组:

[{:locale=>:"en-US", :key=>:key1}, 
 {:locale=>:"en-US", :key=>:key2}, 
 {:locale=>:da,      :key=>:key1}]

像这样放入一个数组中:

['locale', 'en-US', 'key', 'key1', 
 'locale', 'en-US', 'key', 'key2', 
 'locale', 'da',    'key', 'key1']

我该怎么做?

【问题讨论】:

  • 请在寻求帮助之前尝试一下

标签: arrays ruby hash


【解决方案1】:

输入

a=[{:locale=>:"en-US", :key=>:key1}, {:locale=>:"en-US", :key=>:key2}, {:locale=>:da, :key=>:key1}]

代码

result=a.map do |h|
  h.map do|k,v|
    [k,v]
  end
end.flatten
p result

或者

p a.flat_map(&:to_a).flatten

输出

[:locale, :"en-US", :key, :key1, :locale, :"en-US", :key, :key2, :locale, :da, :key, :key1]

【讨论】:

  • 另一个选项a.flat_map(&:flatten)
  • @rajagopalan 只要map(没有flat_map)也可以。
  • 请注意,OP 希望构造一个字符串数组。
【解决方案2】:

或者,更快更容易:

array = [{:locale=>:"en-US", :key=>:key1}, {:locale=>:"en-US", :key=>:key2}, {:locale=>:da, :key=>:key1}]
array.map { |hash| [hash.keys, hash.values] }.flatten

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2016-06-23
    • 2014-09-26
    • 2016-03-30
    相关资源
    最近更新 更多