【问题标题】:Return matching nested array in Ruby在 Ruby 中返回匹配的嵌套数组
【发布时间】:2013-11-28 08:20:00
【问题描述】:

我有一个嵌套的“主”数组,我希望返回在第二个“匹配”数组中匹配的元素的结果(整个嵌套数组)。我已经能够使用 (main && match) 返回数组所需输出的第一个值,但我可以找到进入嵌套数组的方法。

主要:

[[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]

匹配:

[222,555,666]

期望的结果:

[[222, [200,201,202]], [555, [500,501,502]], [666, [600,601,602]]]

【问题讨论】:

    标签: ruby arrays multidimensional-array


    【解决方案1】:

    这是使用Array#assoc的完美场所:

    data = [[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]
    match = [222,555,666]
    
    p match.map{|i| data.assoc(i)}
    
    #=> [[222, [200, 201, 202]], [555, [500, 501, 502]], [666, [600, 601, 602]]]
    

    来自docsArray#assoc

    搜索一个数组,其元素也是比较 obj 的数组 每个包含数组的第一个元素使用 obj.==.

    返回第一个匹配的包含数组(即第一个 关联数组),如果没有找到匹配项,则返回 nil。

    【讨论】:

      【解决方案2】:

      使用select 匹配每个子数组中的第一个元素:

      data = [[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]
      
      match = [222, 555, 666]
      
      results = data.select{|x| match.include?(x[0])}
      
      p results
      
      #=> [[222, [200, 201, 202]], [555, [500, 501, 502]], [666, [600, 601, 602]]]
      

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 2016-07-13
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多