답변:
다음과 같이 할 수 있습니다.
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
하려면 트릭을 수행해야합니다. 다시 말하지만, 당신이 돌연변이하지 않으려는 경우 a
, 사용 a + b
및 변수에 결과를 할당합니다.
이 페이지의 일부 의견에 대한 응답으로이 두 솔루션은 모든 크기의 배열에서 작동합니다.
["Cat", "Dog", "Mouse", "and", "&"]
OP가 원하는 것이 아닙니다.
중복을 원하지 않는 경우 통합 연산자를 사용하십시오 .
new_array = a | s
s
는 새 어레이의 끝에 있습니다.
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]