2016-10-31 12 views
6

Mảng sau đây có chứa hai mảng từng có giá trị 5 số nguyên:mảng kết hợp trong Ruby

[[1,2,3,4,5],[6,7,8,9,10]] 

Tôi muốn kết hợp chúng trong một cách mà nó tạo ra lăm mảng khác nhau bằng cách kết hợp các giá trị của cả hai mảng ở chỉ số 0 , 1 .. tối đa 4.

Đầu ra phải được như thế này:

[[1,6],[2,7],[3,8],[4,9],[5,10]] 

có cách nào đơn giản nhất để làm điều này?

Trả lời

9

Còn phương pháp transpose thì sao?

a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 

a.transpose 
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

phương pháp này cũng có thể giúp bạn trong tương lai, như ví dụ:

a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 

a.transpose 
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]] 
+0

Vâng, nó hoạt động và sẽ giúp đỡ trong tương lai là tốt. – Arif

5
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 
a.first.zip(a.last) 
2

Nếu bạn chắc chắn mảng tiểu của bạn có cùng độ dài, bạn có thể sử dụng Array#transpose:

[[1,2,3,4,5],[6,7,8,9,10]].transpose 
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

Là phần thưởng, nó hoạt động tốt với hơn 2 mảng:

[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]].transpose 
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]] 

Nếu bạn không chắc chắn mảng tiểu của bạn có cùng chiều dài:

[[1,2,3,4,5],[6,7,8,9], [10,11]].reduce(&:zip).map(&:flatten) 
#=> [[1, 6, 10], [2, 7, 11], [3, 8, nil], [4, 9, nil], [5, nil, nil]] 

dùng transpose trong ví dụ này sẽ ném một IndexError.

1

Sử dụng phân song song:

a, b = [[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]] 
a.zip b #=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]