我有str1和str2。 str1可能是或不是一个空字符串,我想构建一个像:
这样的数组str1 = ""
str2 = "bar"
["bar"]
或
str1 = "foo"
str2 = "bar"
["foo", "bar"]
我现在只能想办法在两条线上做这个,但我知道必须有办法做到这一点。
答案 0 :(得分:14)
[str1, str2].reject {|x| x==''}
答案 1 :(得分:12)
在ruby 1.9中
[*(str1 unless str1.empty?), str2]
在ruby 1.8中
[(str1 unless str1.empty?), str2].compact
答案 2 :(得分:3)
您可以使用 delete_if :
['', 'hola'].delete_if(&:empty?)
如果你正在使用Rails,你可以用空白替换空??
['', 'hola'].delete_if(&:blank?)
或使用块:
['', 'hola'].delete_if{ |x| x == '' }
答案 3 :(得分:3)
[:starting_element].tap do |a|
a << true if true
a << false if false
a << :for_sure
end
# => [:starting_element, true, :for_sure]
所以在一行
[].tap { |a| [foo, bar].each { |thing| a << thing unless thing.blank? } }
[bar].tap { |a| a << bar unless foo.blank? }
答案 4 :(得分:1)
另一种方式,
(str1.present? ? str1 : []) + [str2]
答案 5 :(得分:1)
也许是西里尔答案的更简洁版本:
Array.new.tap do |array|
if condition
array << "foo"
end
end
答案 6 :(得分:0)
您可以使用三元声明:
ary = (str1.empty?) ? [ str2 ] : [ str1, str2 ]
str1 = ''; str2 = 'bar'
(str1.empty?) ? [ str2 ] : [ str1, str2 ] #=> ["bar"]
str1 = 'foo'; str2 = 'bar'
(str1.empty?) ? [ str2 ] : [ str1, str2 ] #=> ["foo", "bar"]
答案 7 :(得分:0)
my_array = [str1, str2].find_all{|item| item != ""}
答案 8 :(得分:0)
你可以修补Aray pr Enumerable并提供条件添加方法。
module Array
def add_if(object, condition=true)
self << object if condition
return self
end
end
这样,它可以链接,保留大部分空间。
array = [].add(:class, is_given?).add(object, false) #etc