• ベストアンサー

二つの配列をソートする

(50,14) (20,15) (16.7,16) (0,17) (-1,18) (5,21) (33.3,22) (51,25) (52,26) (51,28) (51,27) を (52,26) (51,25) (51,27) (51,28) (50,14) (33.3,22) (20,15) (16.7,16) (5,21) (0,17) (-1, 18) のようにソートしたいのですが、有効なソートの方法がありましたら教えてください。左側の数字を配列A、右側を配列Bに入れてソートしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

自分も、1組のまま扱う手段が自然だと思います。 Rubyで まず、やりたい事自体を表したコードはこうです。 # sample1 https://ideone.com/9KCdQ 「元の組の1要素目は符号反転させ、2要素目はそのままにした新しい組」を作り、それに基づいてもとの配列をソートしています。 もしこの動きを、記載されたような「文字列」に適用するならこんな感じです。 # sample2 https://ideone.com/19hmb ここでのARGFには標準入力が繋がっていると思ってください。 正規表現を利用して、sample1と同様な組の配列に変換しています。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

言語などの条件はないのでしょうか? 独立した二つの配列をそれぞれソートするよりも、二つの要素の集まりをソートした方が楽でしょう。 試しにRubyで書くとこんな感じ ary = DATA.map{|x| (x.scan(/-?\d+(?:\.\d*)?/)).map(&:to_i) }.sort{|y, z| (z[0]<=>y[0]).nonzero? || y[1]<=>z[1]} ary.each{|x| puts "(#{x.join(',')})" } __END__ (50,14) (20,15) (16.7,16) (0,17) (-1,18) (5,21) (33.3,22) (51,25) (52,26) (51,28) (51,27) で、結果。 (52,26) (51,25) (51,27) (51,28) (50,14) (33,22) (20,15) (16,16) (5,21) (0,17) (-1,18)

one-eyed
質問者

補足

ありがとうございます。手順だけを知りたいので、どの言語でも関係ありません。Rubyはやったことありませんが、そのコードはどういった方法でソートしてるのですか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず 2つは考えられる: 案1: 対応する要素同士を組みとしてまとめて, その「組」の配列をソートする. 案2: 配列の要素に基づいて添え字をソートする.

関連するQ&A

専門家に質問してみよう