【问题标题】:Is there a more elegant way to turn this array to a hash? [duplicate]有没有更优雅的方法可以将此数组转换为哈希? [复制]
【发布时间】:2015-07-23 14:05:41
【问题描述】:

所以我有一个嵌套数组,我想将它转换成一个散列,这样一个公共键指向一个值数组。这是我所拥有的:

 b=[[6, "Jet"], [0, "Fuel"], [0, "Engine"]]
 c={}
 b.map { |x| c[x[0]] ||= []; c[x[0]] << x[1] }

 => {6=>["Jet"], 0=>["Fuel", "Engine"]}

有没有更惯用的方法来做到这一点?

【问题讨论】:

    标签: arrays ruby hash


    【解决方案1】:

    地图可以修改如下。差别不大,但没有;

    b.map { |x| (c[x[0]] ||= []) << x[1] }
    

    注意:each 更适合这里。

    【讨论】:

    • 不错!你也可以b.map { |k, v| (c[k] ||= []) &lt;&lt; v }.
    • @w0lf 是的!这样更优雅。
    【解决方案2】:

    我不知道这是否更惯用,但我发现使用the Hash constructor that takes a block 更具可读性:

    c = Hash.new { |h, k| h[k] = [] }
    b.each { |k, v| c[k] << v }
    

    结果存储在ctest)中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多