「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@503) [低] [未処理]
@503■ (#1575) 表ソート時の処理について。 - serica (2010-04-15 17:37) /低 未処理
【症状】
①表ソート系を行った際、指定列の内容が同一の行どうしの並びが、ソート実行前の並びでなく、逆順?になってしまう。(少なくとも元の並びに従ってない)

②なでしこエディタの置換ダイアログのバグ?かと思いますが
エディタ上でコピーをすると、文字が正常に取得できず、文字化けする。
同じく置換ダイアログで入力ログが記録されない。

【再現方法】
①サンプルソース
──────────────────
A=「あ,1
い,2
う,1
え,2
お,1」をCSV取得
//Aを配列逆順
Aの1を表数値ソート
Aを表示。
──────────────────
実行すると、
「お,1
 う,1
 あ,1
 え,2
 い,2」となる。
第1列の値が「1」どうしの「あ」「う」「お」は元の並びが
「あうお」だが、「おうあ」となってしまっている。
同様に第1列の値が「2」どうしの「い」「え」も
「いえ」だった並びが、「えい」となってしまっている。

回避策として
コメント扱いしている配列逆順を有効にして、先んじて並びを反転する事で、想定の結果を得られる。(この事から逆順になっていると判断)

【要望】
①表ソート系命令の内部的な処理で、対応頂ければ幸いです。
②なでしこエディタの修正で対応頂ければ幸いです。

【バージョン】1.5326
【その他】

(#1578) 1はカスタムソートを使って下さい - U D (2010-04-18 18:12) /低 未処理
1番の問題については、配列カスタムソートで対応できると思います。
表ソート命令は他の列まで見て並べ替えている訳ではないので、細かい
オプション指定のソートをしたい場合はカスタムソート命令や、自前の
ソートロジックを組まないといけません。
※他の列までソートの比較対象にすると、並べ替えが遅くなってしまいます。

[配列カスタムソート - なでしこリファレンス]
 http://nadesi.com/man/page/%E9%85%8D%E5%88%97%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%BD%E3%83%BC%E3%83%88

2番は、結構昔からこうなってますね。
僕も、できればこれは修正して欲しいです。

(#1580) 補足します。(第二ソートなどを求めている話ではありません) - serica (2010-04-19 17:34) /低 未処理
上手く伝わらない書き方だった様で申し訳ありません。

①で言いたかったのは、

指定列の値順で並び、もし、同値の行が存在すれば、同値の行同士の並び順は、『元々の並び』。

であって欲しいのに、

指定列の値順で並び、もし、同値の行が存在すれば、同値の行同士の並び順は、『元々逆順の並び』。

になっているという事です。

①の別のもっと単純化したサンプルとして
──────────────────
A=「あ,1
A,1
ア,1」をCSV取得

Aの1を表数値ソート
Aを表示
──────────────────
ソートする列が全て同値なので、本来は元と変わらないで欲しい訳ですが、
サンプルを実行した結果は
「ア,1
 A,1
 あ,1」
となり、配列逆順したのと同じ結果に。

という事ですので、決して第一列の値が同じ行同士で、
別の列を参照したソートとかをして欲しいという事ではありません。

この為前回の書き込みでも書かせて頂いていますが、事前に配列逆順を行ってから、ソートを行うと、一応は想定通りの結果には為ります。

(#1637) ソートに関して - クジラ飛行机 (2010-06-04 23:16) /低 未処理
エディタの問題は、切り分けたいので、(@505)に移しました。

ソートに関しては、ソートアルゴリズムの問題ですね。

一般的に、ソートアルゴリズムで最速なのは、クイックソートですが、これは順番が保持されません。
どうしても、順番を保持したい場合は、選択ソートやマージソートを使います。

ソートアルゴリズムに関して
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/

なでしこでは、速度優先のクイックソートを採用しているため順番が保持されません。

どうしても順番を保持したい場合は・・・牽引用の何かしらのフィールドを作って順番が保持されるように工夫する必要があります。


(#1575)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能