Ruby에서 배열을 다른 배열에 추가하고 다차원 결과가 나오지 않게 하려면 어떻게 해야 하나요?

somearray = ["some", "thing"]

anotherarray = ["another", "thing"]

somearray.push(anotherarray.flatten!)

예상했던

["some","thing","another","thing"]
질문에 대한 의견 (6)

# 39, 아이디어, 그러나 've got a 작업 you& 플랫화할!' 는 엉뚱한 곳으로 사용할 수 있습니다 - it 병합합니다 리시버인 그러하매 迈向 선반가공 ' [1, 2, [& # 39, & # 39,, # 39 foo& bar& # 39.]]' 에 ' [1.2, & # 39, & # 39,, # 39 foo& bar& # 39]'.

39 m, 그리고 일부 i& 의심없는 외곽진입 수 있지만 연결 :

a1.concat a2
a1 + a2              # creates a new array, as does a1 += a2

또는 prepend / 덮어쓰기/추가 :

a1.push(*a2)         # note the asterisk
a2.unshift(*a1)      # note the asterisk, and that a2 is the receiver

또는 스플라이스를 :

a1[a1.length, 0] = a2
a1[a1.length..0] = a2
a1.insert(a1.length, *a2)

또는 덮어쓰기/추가 및 플랫화할 :


(a1 
해설 (14)

'+' 연산자를 사용하면 됩니다!

irb(main):001:0> a = [1,2]
=> [1, 2]
irb(main):002:0> b = [3,4]
=> [3, 4]
irb(main):003:0> a + b
=> [1, 2, 3, 4]

배열 클래스에 대한 자세한 내용은 여기에서 확인할 수 있습니다: http://ruby-doc.org/core/classes/Array.html

해설 (7)
  • * 를 사용할 수 있는 방법, concat 어레이입니다 깨끗한 외곽진입 새로운 것을 만들 수 없을 것이라고 어레이입니다 (# + 같은 일을 할 수 있는 새로운 것을 만들 수 있지만 달리 어레이입니다 어레이입니다).

에서 바로 문서 (http://www.ruby-doc.org/core-1.9 .3/array.html # 내가 concat 방법): &gt. # # concat (other_ary) &gt >; 요소를 첨부됩니다 other_ary 자체.

그래서

[1,2].concat([3,4])  #=> [1,2,3,4]  
  • * 어레이입니다 통과될 경우 인수로 concat 다차원 배열 플랫할 않습니다. # 39 you& ll 처리해야 하는, 별도로 있는.

arr= [3,[4,5]]
arr= arr.flatten   #=> [3,4,5]
[1,2].concat(arr)  #=> [1,2,3,4,5]

마지막으로, 우리의 코레리브 컴팩트형 사용할 수 있습니다 (https://github.com/corlewsolutions/corelib) 를 알고 있는 유용한 루비 자도으로 기본 클래스. 특히 우리가 가지고 있는 add_all # 어레이입니다 메서드로부터 다차원 어레이에는 플랫화할 하면 자동으로 실행하기 전에 concat.

해설 (2)

이렇게 하면 배열을 결합하여 중복을 제거합니다.

array1 = ["foo", "bar"]
array2 = ["foo1", "bar1"]

array3 = array1|array2

http://www.ruby-doc.org/core/classes/Array.html

자세한 문서는 을 참조하세요;

해설 (2)

쉬운 방법을 사용할 수 있는 것이 아니라, 루비 버전 &gt = 2.0tb 이전 버전:

irb(main):001:0> a=[1,2]
=> [1, 2]
irb(main):003:0> b=[3,4]
=> [3, 4]
irb(main):002:0> c=[5,6]
=> [5, 6]
irb(main):004:0> [*a,*b,*c]
=> [1, 2, 3, 4, 5, 6]
해설 (5)

다음은 이 경우엔 그 첫 번째 방법은 두 가지 방법 공지 color_name 새로운 스토리지 (소미어리 소미어리 + 아노테라리 있습니다 =)

somearray = ["some", "thing"]

anotherarray = ["another", "thing"]

somearray += anotherarray # => ["some", "thing", "another", "thing"]

somearray = ["some", "thing"]
somearray.concat anotherarray # => ["some", "thing", "another", "thing"]
해설 (0)

' (array1 + array2) 지우니크'

이렇게 확보하십시오 array1 요소 1. 중복되지 않는 얻을 수 있습니다.

해설 (0)
a = ["some", "thing"]
b = ["another", "thing"]

첨부하려면 'b' 를 'a' 와 'a' 에서 결과를 저장하기:

a.push(*b)

또는

a += b

두 경우 모두 'a' 됩니다.

["some", "thing", "another", "thing"]

그러나 전자의 경우 요소를 'a' 와 'b' 는 기존 덧붙여집니다 어레이로써, 후자의 경우에는 그 결과 'a' 로 연결된 두 개의 어레이에는 함께 저장됩니다.

해설 (1)

39 에 대한 적절한 답을 오토메이티드 정성 들여 @Pilcrow& 유일한 대규모 어레이에는 concat ' (' + ') 는' 은 빠르고 이후 새 객체를 할당할지 쓰레기요 수집됩니다 루프지 안에 작동할 때 수 없습니다.

39 의 here& 벤치마크:

require 'benchmark'

huge_ary_1 = Array.new(1_000_000) { rand(5_000_000..30_000_00) }

huge_ary_2 = Array.new(1_000_000) { rand(35_000_000..55_000_00) }

Benchmark.bm do |bm|
  p '-------------------CONCAT ----------------'
  bm.report { huge_ary_1.concat(huge_ary_2) }

  p '------------------- PUSH ----------------'
  bm.report { huge_ary_1.push(*huge_ary_2)  }
end

결과:

       user     system      total        real
"-------------------CONCAT ----------------"
  0.000000   0.000000   0.000000 (  0.009388)
"------------------- PUSH ----------------"
  example/array_concat_vs_push.rb:13:in `block (2 levels) in ': stack level too deep (SystemStackError)
    • 오류 '한' 누름식 사용하여 볼 수 있듯이 던진다. 너무 깊이 스택할 수준 (시스템스타커로) '' 때 어레이입니다 작지 않다.
해설 (0)

또 다른 방법은 그냥 그렇게 해.

[somearray, anotherarray].flatten
=> ["some", "thing", "another", "thing"]
해설 (0)

이 문제는 본질적으로 Ruby&quot 시스템을 어떻게 연결할 ";). 답은 'concat' 또는 '+' 에서 언급한 대로 자연스럽게 사용할 수 있는 거의 모든 문제를 해결해 드립니다.

자연스러운 확장명은 수행할 수 있는 방법을 묻는 질문에 약간만이라도 &quot 행일 와이즈 연결, 2d 어레이에는 ruby". 이렇게 질문을 할 때, 루비,) 는 봤 &quot 연결 matrices&quot 상단형 결과: 그러하매 생각해봤죠 꼭 이래야겠어요 내 질문에 대한 답을 남겨두십시오 etlat (부탁받지 않은 수준이지만 관련) 이 후세.

일부 응용 프로그램의 &quot concatenate&quot, 할 수 있습니다. 두 개의 2D 어레이에는 행일 와이즈. 같은 일이,

[[a, b], | [[x],    [[a, b, x],
 [c, d]] |  [y]] =>  [c, d, y]]

이 같은 일이 &quot augmenting"; matrix. 예를 들어, 내가 이 방법을 하나 만드는 인접행렬 아웃해야 그래프란다 표현하기 위해 사용되는 여러 작은 호환표. 이 기법은 꼭 이래야겠어요 반복할 수밖에 없는 방식으로 생각할 수 있는 컴포넌트 또는 답답한 것은 오류가 발생할 가능성이 높은 것으로 알고 있다. 예를 들어 ',' 내가 권능은하나님께 each_with_index 수행할 수 있을 것이다. 대신 내가 결합됨 [zip] [0] 및 [플랫화할] [1] 다음과 같이

# given two multi-dimensional arrays that you want to concatenate row-wise
m1 = [[:a, :b], [:c, :d]]
m2 = [[:x], [:y]]

m1m2 = m1.zip(m2).map(&:flatten)
# => [[:a, :b, :x], [:c, :d, :y]]

[0]: # 내가 메서드로부터 zip .0/array.html http://ruby-doc.org/core-2.2 [1]: # 내가 플랫화할 방법 .0/array.html http://ruby-doc.org/core-2.2

해설 (0)

이 경우 또는 스칼라, 배열 및 운영까지도 막기 위해 새로운 데이터 될 수 있는 경우, 새로운 데이터 네스트된 인턴이었을때를 어레이입니다 쥐포가 되는거야 연산자는 멋져! It 에 대한 스칼라 되돌려줍니다 스칼라 및 오버클로킹된 압축을 푼 인수만 목록니다 어레이입니다.

<! - begin 스니핏: js 숨기십시오: &gt 거짓값 -;

1.9.3-p551 :020 > a = [1, 2]
 => [1, 2] 
1.9.3-p551 :021 > b = [3, 4]
 => [3, 4] 
1.9.3-p551 :022 > c = 5
 => 5 
1.9.3-p551 :023 > a.object_id
 => 6617020 
1.9.3-p551 :024 > a.push *b
 => [1, 2, 3, 4] 
1.9.3-p551 :025 > a.object_id
 => 6617020 
1.9.3-p551 :026 > a.push *c
 => [1, 2, 3, 4, 5] 
1.9.3-p551 :027 > a.object_id
 => 6617020 

끝 - &lt 스니핏 >;!

해설 (0)

'[&''일부&'', &''사물&''] + [&''다른&'' + &''사물&'']`입니다.

해설 (1)

39 m ',' 잘 작동하는 i& 아니예 언급한 것은 놀랄 수 있을 때 배열입니다 어레이에는:

lists = [["a", "b"], ["c", "d"]]
flatlist = lists.reduce(:+)  # ["a", "b", "c", "d"]
해설 (0)
a = ['a', 'b']
b = ['c', 'd']
arr = [a, b].flatten

39 이 won& dup 제거하시겠습니까 있지만, t

a|b

절감뿐만 dup.

해설 (1)

난 후 그 같은 곳에 쉽게 푸시할 또는 덮어쓰기/추가 어레이에는 플랫화할 있습니다.

somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray.push anotherarray # => ["some", "thing", ["another", "thing"]]
#or
somearray  ["some", "thing", ["another", "thing"]]
somearray.flatten!  # => ["some", "thing", "another", "thing"]
somearray # => ["some", "thing", "another", "thing"]
해설 (0)

소미어리 = [&quot some&quot thing&quot ";;;]

아노테라리 = [&quot another&quot thing&quot ";;;]

  • 아노테라리 소미어리
해설 (0)