- ベストアンサー
配列のソート
教えていただけますか? 一つの配列にサイズの異なるオブジェクトがいくつか入っています。 もう一方にもサイズの異なるオブジェクトがいくつか入っています。 双方の配列内のオブジェクトは同一ではありません。 しかしサイズが同一の異なるオブジェクトが対として入っています。 双方配列内のオブジェクトを同じサイズの順番で並ぶように、片方の配列の順番を並べ替えるにはどのようなアルゴリズムがよいのでしょうか? よろしくお願いします。 例 配列A (aaa:size5) (bbb:size3) (ccc:size2) (ddd:size9) 配列B (ppp:size9) (qqq:size3) (rrr:size2) (sss:size5) を 配列A (aaa:size5) (bbb:size3) (ccc:size2) (ddd:size9) 配列B (sss:size5) (qqq:size3) (rrr:size2) (ppp:size9)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
色々なやり方が有るでしょうが、私ならこうやると言うことで。 要点のみ。 配列Aに対応した配列XとYを取ります Xには順序1....nを入れます。 Yにはサイズを入れます。 A,X,YをYの昇順でソートします。 配列Bに対応した配列Zを取ります。 Zにはサイズを入れます。 B,ZをZの昇順でソートします。 最後にA,X,Y,B,ZをXの昇順でソートすれば、A,Bが求める結果になるでしょう。 Y,Zはソートしなくてもいいですが入れておけばサイズ一致のチェックには使えるでしょう。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
言語が書いてませんが、Ruby ならこんな感じ。 a=["aaaaa","bbb","cc","ddddddddd"] b=["ppppppppp","qqq","rr","sssss"] leng2key = Hash.new # 長さからキー値への変換テーブル a.each_with_index { |str,idx| leng2key[str.length]=idx } b = b.sort_by{ |str| leng2key[str.length] } # 長さをキーに変換してそれでソート p b 結果は、["sssss", "qqq", "rr", "ppppppppp"] になります。 なお、配列Aに存在しない長さのものが配列Bにあったらどうするか書いてないので、その場合はエラーになるようにしています。
お礼
ありがとうございます 参考にします
お礼
ありがとうございます やってみます