Answers:
您可以执行以下操作:
a.zip(s).flatten.compact
a
元素超过3个怎么办?
[a, s].transpose
除了两行不符合之外,#zip
这是显而易见的解决方案。而且我不相信他的意思是他真的在乎是否需要a
突变...我不认为他根本没有评论过突变与功能解决方案,他只是在描述模式。
这不会按照Chris要求的顺序给出结果数组,但是如果结果数组的顺序无关紧要,则可以使用a |= b
。如果您不想mutate a
,则可以编写a | b
结果并将其分配给变量。
请参阅位于http://www.ruby-doc.org/core/classes/Array.html#M000275的Array类的集合联合文档。
该答案假定您不希望重复数组元素。如果要在最终数组中允许重复的元素,a += b
则应采取措施。同样,如果您不想mutate a
,请使用a + b
并将结果分配给变量。
为了回应此页面上的某些评论,这两种解决方案将适用于任何大小的阵列。
["Cat", "Dog", "Mouse", "and", "&"]
,这不是OP想要的。
s.inject(a, :<<)
s #=> ["and", "&"]
a #=> ["Cat", "Dog", "Mouse", "and", "&"]
它没有给您所需的顺序,但这是通过追加两个数组来合并两个数组的一种好方法。
这是一个允许交错插入多个不同大小的数组的解决方案(一般解决方案):
arr = [["Cat", "Dog", "Mouse", "boo", "zoo"],
["and", "&"],
["hello", "there", "you"]]
first, *rest = *arr; first.zip(*rest).flatten.compact
=> ["Cat", "and", "hello", "Dog", "&", "there", "Mouse", "you", "boo", "zoo"]
它并不十分优雅,但是可以用于任何大小的数组:
>> a.map.with_index { |x, i| [x, i == a.size - 2 ? s.last : s.first] }.flatten[0..-2]
#=> ["Cat", "and", "Dog", "&", "Mouse"]
i = s.cycle; a.map { |x| [x, i.next] }.flatten[0..-2]
同样有效。
and
和&
,所以我尽可能地接受了他,同时允许a
任何长度。
要处理两个a
&s
的大小不同的情况:
a.zip(s).flatten.compact | s
.compact
nil
当a
大于时将删除s
| s
将s
在a
小于时添加剩余的项目s
进行交织并确保哪一个是zip方法的最大数组的一种方法是用其中一个数组填充nil
直到另一个数组大小为止。这样,您还可以保证哪个数组的哪个元素位于第一个位置:
preferred_arr = ["Cat", "Dog", "Mouse"]
other_arr = ["and","&","are","great","friends"]
preferred_arr << nil while preferred_arr.length < other_arr.length
preferred_arr.zip(other_arr).flatten.compact
#=> ["Cat", "and", "Dog", "&", "Mouse", "are", "great", "friends"]
preferred_arr.zip(other_arr).flatten | other_arr
无需零填充)
arr = [0, 1]
arr + [2, 3, 4]
//outputs [0, 1, 2, 3, 4]