11

Tôi đang sử dụng Ruby on Rails 3.2.2 và Ruby 1.9.2.Làm cách nào để tôi có thể "trích xuất" các giá trị từ một mảng đa chiều theo cách thông minh?

Do sau đa chiều Array:

[["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

Tôi muốn nhận được (lưu ý: Tôi muốn "giải nén" chỉ giá trị đầu tiên của tất cả các "lồng" Array s):

["value1", "value2", "value3"] 

Làm cách nào để tôi thực hiện điều đó một cách thông minh?

+1

thể trùng lặp của [Cho một mảng A n subArrays Sn, làm thế nào tôi có thể chọn Array của Sn \ [i \] thành viên trong Ruby?] (Http://stackoverflow.com/questions/11120244/given-an-array-a-of-n-subarray-sn-how-can-i-select-array-of-sni-members) –

+0

@ KL-7 - Bạn nói đúng, nhưng tôi đã không không tìm thấy câu hỏi bạn đã liên kết trước đây để đăng câu hỏi mới. – user12882

Trả lời

23

Bạn có thể sử dụng Array#collect để thực thi một khối cho mỗi phần tử của mảng ngoài. Để lấy phần tử đầu tiên, hãy truyền một khối chỉ mục mảng đó.

arr.collect {|ind| ind[0]} 

Trong sử dụng:

 
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
arr.collect {|ind| ind[0]} 
=> ["value1", "value2", "value3"] 

Thay vì {|ind| ind[0]}, bạn có thể sử dụng Array#first để có được những yếu tố đầu tiên của mỗi mảng nội:

arr.collect(&:first) 

Đối với cú pháp &:first, đọc "Ruby/Ruby on Rails ampersand colon shortcut".

2
>> array = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
=> [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 
>> array.map { |v| v[0] } 
=> ["value1", "value2", "value3"] 
+0

Để làm rõ, không có sự khác biệt giữa 'arr.map' và' arr.collect'. Xem http://stackoverflow.com/questions/5254732/difference-between-map-and-collect-in-ruby – forforf

1
arr = [["value1", "value1_other"], ["value2", "value2_other"], ["value3", "value3_other"]] 

Solution1 = arr.map {|elem| elem.first} 

Solution2 = arr.transpose[0] 
Các vấn đề liên quan