나는 배열 배열의 요소 순서를 변경하는 방법은 무엇입니까?
[[:name1, :value1], [:name2, :value2]]
배열
[[:value1, :name1], [:value2, :name2]]
이 작업을 수행하는 가장 좋은 방법은 무엇인가에 배열
을 변환하려면?나는 배열 배열의 요소 순서를 변경하는 방법은 무엇입니까?
[[:name1, :value1], [:name2, :value2]]
배열
[[:value1, :name1], [:value2, :name2]]
이 작업을 수행하는 가장 좋은 방법은 무엇인가에 배열
을 변환하려면?다양한 옵션 (짧은 손 설탕 다음 각 버전) :
# Create a new array of swapped elements
my_array = my_array.map{ |a| a.reverse }
my_array = my_array.map(&:reverse)
# Mutate the existing array with swapped elements
my_array.map!{ |a| a.reverse }
my_array.map!(&:reverse)
# Mutate the elements in the existing array
my_array.each{ |a| a.reverse! }
my_array.each(&:reverse!)
첫 번째 옵션 인 기존 배열이 경우에 (수정되지 않습니다으로 '안전'한, 당신은 그들에게 다른 참조가 있습니다 변경해서는 안됨).
두 번째 옵션은 my_array
에 대한 참조가 두 개 있지 않고 한 개만 해제해야하는 경우가 아니라면 첫 번째 옵션과 대략 동일합니다.
세 번째 옵션은 가장 파괴적인 옵션입니다. pairwise 요소에 대한 모든 참조가 변경됩니다. 그러나 새로운 배열이 생성되지 않기 때문에 가장 메모리 효율적입니다.
그냥 재미로하는 대답 (루빅스 큐브와 같은 매트릭스를 회전) :
array = [[:name1, :value1], [:name2, :value2]]
array.transpose # [[:name1, :name2], [:value1, :value2]]
.reverse # [[:value1, :value2], [:name1, :name2]]
.transpose
#=> [[:value1, :name1], [:value2, :name2]]
(같은 재미 있고 분명하지만, 여전히 불가능) 또 하나의 방법 :
array.inject(&:zip).reverse.inject(&:zip)
#=> [[:value1, :name1], [:value2, :name2]]
하나 더 방법은 사용하는 것입니다 to_h
to_a
:
array = [[:name1, :value2], [:name2, :value2]]
array.to_h # {name1: :value1, name2: :value2}
.invert # {value1: :name1, value2: :name2}
.to_a # [[:value1, :name1], [:value2, :name2]]
이 솔루션은 모든 이름과 값이 고유 할 것으로 기대합니다. –
각 쌍을 교환하면됩니까? 너 뭐 해봤 니? 이 문제를 해결하는 방법에는 여러 가지가 있으며, "최선"은 주관적입니다. – Carcigenicate