如何最自然地创建一个数组,从多个变量中筛选出不是 nil
的值?
给出以下这些变量:
a = 1
b = nil
c = 3
我想创建一个数组
ary
:ary #=> [1, 3]
我可以使用Array#compact
:
ary = [a, b, c].compact
ary #=> [1, 3]
但是仅仅为了删除特定元素而将所有内容放在数组中并不合适。
另一方面,使用if
语句会产生更多的代码:
ary = []
ary << a if a
ary << b if b
ary << c if c
ary #=> [1, 3]
是否有其他或更好的方法,使用上述任何一种方法有什么优缺点?
PS:false
不一定要考虑。变量可以是真值(数字/字符串/数组/哈希),也可以是 nil
。
compact
。但由于我正在创建一个新数组,我认为最好不要一开始就添加nil
值。但这只是我的个人意见 :-) - Stefannon_nil_values
,你会感到满意吗? - ndnenkov#compact!
在我看来是最好的方法,每个人都能一眼看出它只是这样做的,并且作为标准库的一部分,它的开销很小。虽然我不确定,但它可能比#<<
和if
的流甚至更快。 - Borsunhoif
移动到一个方法中。 - Stefan