somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray.push(anotherarray.flatten!)
예상했던
["some","thing","another","thing"]
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 << a2).flatten! # a call to #flatten instead would return a new array
'+' 연산자를 사용하면 됩니다!
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
에서 바로 문서 (http://www.ruby-doc.org/core-1.9 .3/array.html # 내가 concat 방법): >. # # concat (other_ary) > >; 요소를 첨부됩니다 other_ary 자체.
그래서
[1,2].concat([3,4]) #=> [1,2,3,4]
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.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]
다음은 이 경우엔 그 첫 번째 방법은 두 가지 방법 공지 color_name 새로운 스토리지 (소미어리 소미어리 + 아노테라리 있습니다 =)
somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray += anotherarray # => ["some", "thing", "another", "thing"]
somearray = ["some", "thing"]
somearray.concat anotherarray # => ["some", "thing", "another", "thing"]
a = ["some", "thing"]
b = ["another", "thing"]
첨부하려면 'b' 를 'a' 와 'a' 에서 결과를 저장하기:
a.push(*b)
또는
a += b
두 경우 모두 'a' 됩니다.
["some", "thing", "another", "thing"]
그러나 전자의 경우 요소를 'a' 와 'b' 는 기존 덧붙여집니다 어레이로써, 후자의 경우에는 그 결과 'a' 로 연결된 두 개의 어레이에는 함께 저장됩니다.
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 <main>': stack level too deep (SystemStackError)
이 문제는 본질적으로 Ruby" 시스템을 어떻게 연결할 ";). 답은 'concat' 또는 '+' 에서 언급한 대로 자연스럽게 사용할 수 있는 거의 모든 문제를 해결해 드립니다.
자연스러운 확장명은 수행할 수 있는 방법을 묻는 질문에 약간만이라도 " 행일 와이즈 연결, 2d 어레이에는 ruby". 이렇게 질문을 할 때, 루비,) 는 봤 " 연결 matrices" 상단형 결과: 그러하매 생각해봤죠 꼭 이래야겠어요 내 질문에 대한 답을 남겨두십시오 etlat (부탁받지 않은 수준이지만 관련) 이 후세.
일부 응용 프로그램의 " concatenate", 할 수 있습니다. 두 개의 2D 어레이에는 행일 와이즈. 같은 일이,
[[a, b], | [[x], [[a, b, x],
[c, d]] | [y]] => [c, d, y]]
이 같은 일이 " 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
이 경우 또는 스칼라, 배열 및 운영까지도 막기 위해 새로운 데이터 될 수 있는 경우, 새로운 데이터 네스트된 인턴이었을때를 어레이입니다 쥐포가 되는거야 연산자는 멋져! It 에 대한 스칼라 되돌려줍니다 스칼라 및 오버클로킹된 압축을 푼 인수만 목록니다 어레이입니다.
<! - begin 스니핏: js 숨기십시오: > 거짓값 -;
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
끝 - < 스니핏 >;!
난 후 그 같은 곳에 쉽게 푸시할 또는 덮어쓰기/추가 어레이에는 플랫화할 있습니다.
somearray = ["some", "thing"]
anotherarray = ["another", "thing"]
somearray.push anotherarray # => ["some", "thing", ["another", "thing"]]
#or
somearray << anotherarray # => ["some", "thing", ["another", "thing"]]
somearray.flatten! # => ["some", "thing", "another", "thing"]
somearray # => ["some", "thing", "another", "thing"]