私はこれを行うための最善の方法は何ですか配列配列の配列の要素の順序を変更するにはどうすればいいですか?
[[:value1, :name1], [:value2, :name2]]
に配列
[[:name1, :value1], [:name2, :value2]]
を変換したいですか?
私はこれを行うための最善の方法は何ですか配列配列の配列の要素の順序を変更するにはどうすればいいですか?
[[:value1, :name1], [:value2, :name2]]
に配列
[[:name1, :value1], [:name2, :value2]]
を変換したいですか?
さまざまなオプション(短期手糖に続く各バージョン):
# 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
への参照が2つあり、そのうちの1つをスワップしない限り、2番目のオプションは最初のオプションとほぼ同じです。
3番目のオプションは最も破壊的です。対の要素への参照はすべて変更されます。ただし、新しい配列が作成されないため、メモリー効率が最も高くなります。
ジャストのための楽しい答え(ルービックキューブのような行列を回転させる):
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