是否有一种实现array.join(", ")
的明星方法,其中逗号仅包含在存在的元素之间?即,如果某些元素不存在于数组中,我最终不会获得孤儿逗号?
答案 0 :(得分:15)
示例:
["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""] => "test word, 5, 7, 7, 6"
编辑:请注意,这里的第一个方法需要Ruby on Rails。将第二种方法用于仅支持Ruby的解决方案
您可以尝试将其删除nil
和空字符串""
,然后加入逗号(它会删除所有nil
值compact
,然后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)元素周围没有逗号。