アプリ版:「スタンプのみでお礼する」機能のリリースについて

(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に入れてソートしたいです。

A 回答 (3件)

とりあえず 2つは考えられる:


案1: 対応する要素同士を組みとしてまとめて, その「組」の配列をソートする.
案2: 配列の要素に基づいて添え字をソートする.
    • good
    • 0

言語などの条件はないのでしょうか?


独立した二つの配列をそれぞれソートするよりも、二つの要素の集まりをソートした方が楽でしょう。
試しに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)

この回答への補足

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

補足日時:2011/05/24 22:19
    • good
    • 0

自分も、1組のまま扱う手段が自然だと思います。


Rubyで

まず、やりたい事自体を表したコードはこうです。
# sample1
https://ideone.com/9KCdQ

「元の組の1要素目は符号反転させ、2要素目はそのままにした新しい組」を作り、それに基づいてもとの配列をソートしています。

もしこの動きを、記載されたような「文字列」に適用するならこんな感じです。
# sample2
https://ideone.com/19hmb

ここでのARGFには標準入力が繋がっていると思ってください。
正規表現を利用して、sample1と同様な組の配列に変換しています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!