- - PR -
文字列配列のソートにて
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-06-12 15:57
お世話になっております。
まさです。 文字列の配列をソートするプログラムを作っています。
上記のような文字列配列を Arrays.sort( ) などを使用してソートすると "aaa100" "aaa20" "aaa3" の順になりますが、これを "aaa3" "aaa20" "aaa100" といったように文字部分が一致している場合には 数値部分でソートしたいと思っているんですが... 1文字ずつ調べて、数値部分と文字部分で分割して 数値部分を数値に変換してからソートする というようなことをしないとだめでしょうか? 何かよい手はありませんでしょうか? | ||||||||
|
投稿日時: 2003-06-13 01:03
コンパレータを自分で作ってやれば良いのでは?
| ||||||||
|
投稿日時: 2003-06-13 01:21
Array.sort()にセットするComparatorを自分で定義することで
自由にソート順が設定できます。私もはじめて知りました 適当にサンプルを作ってみました。 どうでしょう?
[ メッセージ編集済み 編集者: おっきー 編集日時 2003-06-13 01:24 ] | ||||||||
|
投稿日時: 2003-06-13 01:34
あ、これだと"aaa000" と "aaa1" なんかがうまくソートできないですね・・・。
比較の部分は自分で工夫してみてください ではでは。 [ メッセージ編集済み 編集者: おっきー 編集日時 2003-06-13 19:52 ] | ||||||||
|
投稿日時: 2003-06-13 15:32
このデータの形に限定したものでしたら、文字列操作の前後処理でも可能です。
1.数値の前に桁数とスペースを入れる。(指数の付加)、桁数は9までとして 2.整列する 3.付加した指数を取り除く。 無理すると 0001と1の対応も可能でしょう。 | ||||||||
|
投稿日時: 2003-06-14 00:01
まさです。お世話になります!
質問の仕方が不適切だったようですね。 おっきーさんより
この「比較部分」について、 「何かよい手はありませんでしょうか? 」 と言う質問でございました。 お手数をおかけして申し訳ないです。 MMX さんより
と言うのは数値部分を桁合わせしろってことでしょうか? ソートしたい文字列は特に書式が決まってるわけではなくて、 しかも可変なんですよ… やっぱり1文字ずつ調べないとだめそうですかねぇ? | ||||||||
|
投稿日時: 2003-06-14 19:56
基本的には1文字ずつ調べないとだめだと思います。1文字ずつ調べるとはいっても,それほど大したコードにはならないはずです(計算量的にも)。
正規表現が利用できるのであれば(JDK 1.4 など),それを利用して分割する方法もあります(速度はやや遅くなりますが)。 | ||||||||
|
投稿日時: 2003-06-16 11:25
10進指数表現みたいな物を使ってSORTできませんか
aaa100 <=> aaa3100 aaa20 <=> aaa220 aaa3 <=> aaa13 桁数が9以上なら2重指数表現とか、区切り記号を使って対応します。 0001と1の同一視は?実験は容易です。エディタですぐ | ||||||||
