【问题标题】:Merge arrays if not nil and not empty如果不为零且不为空,则合并数组
【发布时间】:2012-09-01 14:47:40
【问题描述】:

Ruby中有一些数组(这种情况下是不是有4个数组)

array1 = [{key="label1.1", value="label1.2"}, {key="label1.2", value="label1.2"}]
array2 = [{key="label2.1", value="label2.2"}]

array3 = []
array4 = nil
result_array = array1 | array2 | array3 | array4 

每个数组都具有与其他数组相同的结构:它是哈希值。它有多少元素,如果它是 nil 或空 - 它是未知的。

所以我需要result_array 来查看:

[{key="label1.1", value="label1.2"}, {key="label1.2", value="label1.2"}, {key="label2.1", value="label2.2"}]

但是该代码将导致异常,因为array4 等于nil

Ruby 有什么方法可以检查数组是否为 nil 且不为空,如果是,则将其合并到 result_array

【问题讨论】:

    标签: ruby ruby-1.9.3


    【解决方案1】:
    [array1, array2, array3, array4].compact.reduce([], :|)
    

    【讨论】:

    • 太棒了。我会试着记住这一点。
    • 要在所有arrayX 都是nil 时处理极端情况,请使用reduce([], :|)
    • 确实,我没有考虑这个案例,谢谢指正:)
    【解决方案2】:

    内核定义了一个名为 Array 的方法,它将不处理数组,但将 nil 转换为空数组。

    array1 = [{:key => "label1.1", :value => "label1.2"}, {:key =>"label1.2", :value => "label1.2"}]
    array2 = [{:key => "label2.1", :value => "label2.2"}]
    
    array3 = []
    array4 = nil
    result_array = Array(array1) | Array(array2) | Array(array3) | Array(array4)
    result_array # => [{:key=>"label1.1", :value=>"label1.2"}, {:key=>"label1.2", :value=>"label1.2"}, {:key=>"label2.1", :value=>"label2.2"}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2017-12-25
      • 2015-10-10
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多