数组连接逗号,仅当元素不是nil时

时间:2015-04-20 20:09:52

标签: ruby arrays join

是否有一种实现array.join(", ")的明星方法,其中逗号仅包含在存在的元素之间?即,如果某些元素不存在于数组中,我最终不会获得孤儿逗号?

4 个答案:

答案 0 :(得分:15)

示例:

["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""] => "test word, 5, 7, 7, 6"

编辑:请注意,这里的第一个方法需要Ruby on Rails。将第二种方法用于仅支持Ruby的解决方案

您可以尝试将其删除nil和空字符串"",然后加入逗号(它会删除所有nilcompact,然后split "" 1}}在""上创建一个二维数组,其中第一个数组中的任何flatten元素只是新二维数组中的空数组,然后它会转换为join(", ")数组回到正常数组但删除了所有空数组,最后它在这个数组上执行> array.compact.split("").flatten.join(", ") array = ["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""] array.compact => ["", "test word", 5, 7, "", "", 7, 6, ""].split("") => [[], ["test word", 5, 7], [], [7, 6], []].flatten => ["test word", 5, 7, 7, 6].join(", ") => "test word, 5, 7, 7, 6"

> array.reject(&:blank?).join(", ")


array = ["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""]

array.reject(&:blank?) => ["test word", 5, 7, 7, 6].join(", ") => "test word, 5, 7, 7, 6"

编辑:另一种方式是:

{{1}}

答案 1 :(得分:7)

我认为你的数组中有nil个元素。你可以这样做:

arr.compact.join(", ")

答案 2 :(得分:2)

compact之前,您似乎需要join数组。它返回没有nil元素的数组副本。

http://ruby-doc.org/core-2.2.0/Array.html#method-i-compact

[1,nil,2,3].compact.join(', ')

您还可以使用compact!从源数组本身中删除nil元素(无需复制)。

答案 3 :(得分:1)

这个答案将连接除嵌套数组中的nil以及平面数组之外的所有数组元素:

[1, nil, 3, [:a, nil, :c], 5, nil, 7].flatten.compact.join(',')
=> "1,3,a,c,5,7"

nils从输出中被抑制,并且不会出现在连接的字符串中,并且缺少(nil)元素周围没有逗号。