web-dev-qa-db-ja.com

テーブルの並べ替えを解除できないことがよくあるのはなぜですか?

データがテーブルに表示される場合、多くの場合、テーブルの行を1列でソートできることが重要です。通常、これは列のヘッダーをクリック可能にし、テーブルヘッダーに▲や▼などのポインターを表示して、ソート順を示します。

しかし、多くの場合、1つの機能が欠落していることに気づきました。これは、ウェブサイトだけでなくデスクトップアプリケーションにも影響し、次の例に示されています。

TableSorting

通常、テーブルをun-sortすることはできません!ヘッダーをクリックすると、並べ替え順序が切り替わりますが、元の順序に戻すことはできません。そして例が言うように:これは非常に迷惑です。私にとっては、後で元の順序に戻すことができないのではないかと常に心配しているので、並べ替え機能を使用することをためらうという影響もあります。

テーブルの元の順序を復元するオプションを提供することが非常に一般的でない理由の賢明な理由はありますか?

漠然とした技術的な理由が想像できます。元の順序はどういうわけか内部的に保持する必要があること、これはメモリのオーバーヘッドを意味する場合があります。しかし、viewでソートが頻繁に発生し、modelがソートされないままであることを考えると、これは引数として数えることはほとんどできません。

1つの列の並べ替えをremoveするオプションを提供すると、multiple列で並べ替えることもでき、それらをプライマリ/セカンダリ/として使用できます。 ..ソート基準。ただし、1つのソート基準を削除できない限り、これは賢明に可能ではありません。


(例はJava/SwingのJTableであり、この場合、カスタム TristateTableRowSorter と、▼▲を表示する専用レンダラーを使用してこれを解決しましたプライマリとセカンダリの並べ替え基準を示すさまざまなサイズの矢印。ただし、これまでに見たほとんどのテーブルプレゼンテーションにはこの機能がありません。

8
Marco13

デザイナーや開発者としてはあまり考えないのは興味深い質問ですが、データがテーブルに表示される特定のコンテキストに応じて、これにはいくつかの論理的な理由があると思います。

データが動的である(つまり、新しいエントリが追加される)テーブルでは、元のソート順を復元すると、実際のソート順が正しくない場合があります。つまり、新しいアイテムが追加され、並べ替え順序を再調整する必要があるため、順序を以前の状態に戻すことはできません。したがって、列を並べ替えるか、新しい順序で別の列を並べ替えるかを選択します。

データが静的な(つまり、新しいエントリが追加されない)テーブルでは、元の並べ替え順序を復元することは、複数の列(昇順と降順の両方)で並べ替えることができるほど簡単です。

テーブルの並べ替えを解除できることが非常に重要である多くの実用的なケースは考えられません。注文を保持することが不可欠である場合、ユーザーが注文を変更できないようにするためです。代わりに、テーブルを検索して結果を返すことを許可することができます(つまり、テーブルのサブセクションをそのままの順序で表示します)。

2
Michael Lai

あなたの例では、列Aは実際には(文を形成するため)暗黙的な順序があり、その列または同じ順序を維持する関連付けられた列のいずれかで並べ替えを行うことができます。

通常、デフォルトの行の順序は、アイテムがモデルにロードされた方法に基づいています。並べ替えが提供されている場合、モデルレベルでデータを事前に並べ替えることは意味がありません。そのため、並べ替えられていないプレゼンテーションにすぎません。なぜこの状態に「リセット」したいのですか?表示時に実際にテーブルに固有の順序がある場合は、その列もソート可能にすることをお勧めします。つまり、逆にソートすることもできます。

テーブルが複数の列でのソートをサポートしている場合、はい、おそらく列のソートを削除するオプションは理にかなっています。ただし、ほとんどの実装は単一の列でのみ並べ替えを行い、せいぜい以前の列の順序を同じ値に維持する安定した並べ替えを使用する可能性があります(したがって、3レベルの並べ替えを適用するには、3次列、2次列、1次列の順に選択します。 )。

2
Alok

実装の難しさ。

テーブルのソートはメタ操作であり、多数の行スワップで構成されています。

ほとんどのアプリケーションの元に戻す機能はスタックに基づいています。スタックの容量は限られています。個々のエントリのように各行スワップを記録すると、スタックが圧倒され、ユーザーがテーブルを部分的にソート解除できるようになる(または強制される)リスクがあります。また、並べ替え操作の速度が低下し、並べ替えコードと元に戻すコード間の相互作用が必要になります。ほとんどのプログラムは、並べ替えを元に戻せないアクションとして扱うことにより、これらの問題を回避します。

はい、ソートの前後に行の順序をハッシュすることが可能かもしれません。並べ替えは、元に戻すためのアトミックアクションとして扱うことができます。しかし、自問してみてください。このデータ構造は、使用するテーブルサイズに合わせて調整されますか?そして、機能を有効にするカスタムコードを喜んで書く人はいますか?

1
Jasper