【问题标题】:how to merge values in a list of map in ruby如何在ruby中合并地图列表中的值
【发布时间】:2019-12-09 09:32:07
【问题描述】:

假设我有像 List> 这样的数据结构,我只想将 List 保留在 map 的值中,

就像,我想转换下面的例子:

x = [{"key1" => ["list1", "list1"]}, {"key2" => ["list2", "list2"]}, {"key3" => ["list3", "list3"]}]

到:

y = [["list1", "list1"], ["list2", "list2"], ["list3", "list3"]]

有什么快速的方法吗?谢谢

【问题讨论】:

    标签: arrays ruby hashmap


    【解决方案1】:

    想到的最快的事情是利用flat_map

    x = [ { "key1" => ["list1", "list1"] }, 
          { "key2" => ["list2", "list2"] }, 
          { "key3" => ["list3", "list3"] }]
    
    y = x.flat_map(&:values)
    
    => [["list1", "list1"], ["list2", "list2"], ["list3", "list3"]]
    

    flat_map 是 Enumerable (https://ruby-doc.org/core-2.6.3/Enumerable.html#method-i-flat_map) 上的实例方法

    values 是 Hash (https://ruby-doc.org/core-2.6.3/Hash.html#method-i-values) 上的一个实例方法

    【讨论】:

    • 吸取教训,谢谢!合并所有值怎么样得到类似[“list1”,“list1”,“list2”,“list2”,“list3”,“list3”]。我只能通过根据您的输出运行另一个 for 循环来做到这一点......谢谢
    • 你可以在末尾添加一个flatten,阿拉:y = x.flat_map(&:values).flatten
    【解决方案2】:

    如果您在这些哈希中只有 1 个键,那么您可以这样做:

    y = x.map { |h| h.values[0] }
    

    【讨论】:

    • 吸取了教训,谢谢!合并所有值怎么样得到类似[“list1”,“list1”,“list2”,“list2”,“list3”,“list3”]。我只能通过根据您的输出运行另一个 for 循环来做到这一点......谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多