【问题标题】:Find values in array of hashes to create new array of hashes在哈希数组中查找值以创建新的哈希数组
【发布时间】:2012-11-12 21:09:11
【问题描述】:

我有一些从 api 返回的数据,我已将其解析为:

[{:a=>value1, :b=>value2, :c=>value3, :d=>value4}, {:a=>value5, :b=>value6, :c=>value7, :d=>value8},{:a=>value9, :b=>value10, :c=>value11, :d=>value12}, ...]

在给定key = bkey = c 的情况下,如何使用bc键和值 创建一个新的哈希数组?我想传递密钥并返回值并维护密钥。所以我想结束:

[{:b=>value2, :c=>value3}, {:b=>value6, :c=>value7}, {:b=>value10, :c=>value11}, ...]

【问题讨论】:

    标签: ruby-on-rails ruby arrays hash


    【解决方案1】:

    纯红宝石

    array = [{:a=>'value1', :b=>'value2', :c=>'value3', :d=>'value4'}, {:a=>'value1', :b=>'value2', :c=>'value3', :d=>'value4'}]
    
    b_and_c_array = array.map{|a| a.select{|k, _| [:b, :c].include?(k)} }
    

    我们使用map 方法获取每个哈希值,该方法将返回一个结果数组。对于每个散列,我们只选择 [:b, :c] 键。您可以在其中添加更多内容。

    导轨

    如果使用 Rails,让我们使用Hash#slice,更漂亮:

    b_and_c_array = array.map{|a| a.slice(:b, :c) }
    

    【讨论】:

    • 哇!像魅力一样工作。我正在尝试将 api 数据中的 lat 和 lng 信息转换为 json 以进行谷歌地图 api 渲染。这种方法让我可以将 lat 和 lng 值选择为 [{lat=>value1, lng=>value2},...] 但我需要 [{lat:value1, lng:value2}]。对此有任何想法吗?欣赏它。
    • 什么意思? api 将格式错误的 json 发回给你?
    • 我明白了。只需要将结果转换为_json。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2022-11-12
    • 2022-01-10
    • 2016-08-31
    • 2018-06-14
    相关资源
    最近更新 更多