我正在寻找一种与Array#|
等效的方法,并且该方法的名称用普通的单词表示。
a = [1, 2, 3]
b = [3, 4, 5]
a|b # => [1, 2, 3, 4, 5]
我不是在寻找新方法。我可以编写将完成此操作的任何方法。那不是我要的我想知道是否有别名。是否有类似a.merge(b)
的方法在2.5.1中不是数组的有效方法?
在版本2.5.1的文档中描述了|
与Array.union(another_array)
相同。但这会引发错误。
a.union(b) # >> undefined method `union' for [1, 2, 3]:Array (NoMethodError)
union
有这样一种书面方法吗?
答案 0 :(得分:3)
Array#union
在Ruby 2.6中可以正常工作,但是如果不是在Ruby 2.5中并且您坚持使用名为union
的方法,那么以下内容在Ruby 2.3.7中对我来说就像是冠军: / p>
[1,2,3].union [4,5,6] # => NoMethodError: undefined method `union' for [1, 2, 3]:Array
class Array
def union(other)
self | other
end
end
[1,2,3].union [4,5,6] # => [1, 2, 3, 4, 5, 6]
要获得与2.6的Array#union
所记录的Ruby早期版本中的行为相当的功能:
class Array
def union(*others)
others.inject(self, &:|)
end
end
[1,2].union [3,4], [5] # => [1, 2, 3, 4, 5]
[10,11].union # => [10, 11]
答案 1 :(得分:2)
即使在Ruby 2.6中,Array#|
也没有确切的等效项。
Array#union
在array.c#rb_ary_union_multi
中实现,而Array#|
在array.c#rb_ary_or
中实现。
对于小数组(少于16个元素),它们都在内部使用rb_ary_union
,对于大数组,它们都使用rb_ary_union_hash
,但是rb_ary_union_multi
接受两个以上的参数:
a = [1, 2, 3]
b = [3, 4, 5]
c = [4, 5, 6]
a.union(b, c)
# => [1, 2, 3, 4, 5, 6]
a.|(b, c)
# ArgumentError (wrong number of arguments (given 2, expected 1))