API ドキュメントにsort()
メソッド onList
があることがわかりますが、パラメーターに必要なものがわかりません。現在必要とされているのは、非常に単純でまっすぐなアルファ比較です。
7 に答える
1. 迅速な解決策
質問ありがとう!String
次のように のリストを並べ替えることができます。
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
上記のコードは次を出力します。
[apples, bananas, oranges]
2. 少し高度な使い方
sort()
は値を返さないことに注意してください。新しいリストを作成せずにリストをソートします。同じ行で並べ替えて印刷したい場合は、メソッド cascadesを使用できます。
print(fruits..sort());
さらに制御するために、独自の比較ロジックを定義できます。価格に基づいて果物を並べ替える例を次に示します。
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
ここで何が起こっているのか見てみましょう。
AList
にはsortメソッドがあり、これには 1 つのオプションのパラメーター a Comparatorがあります。Comparator はtypedef
or 関数エイリアスです。この場合、次のような関数のエイリアスです。
int Comparator(T a, T b)
ドキュメントから:
Comparator 関数は、a が b より小さい場合は負の整数を返し、a が b と等しい場合は 0 を返し、a が b より大きい場合は正の整数を返すことによって、このような全順序付けを表します。
3.カスタムオブジェクトのリストでそれを行う方法
さらに、カスタム オブジェクトで構成されたリストを作成する場合は、Comparable<T>
asmixin
または as inheritance ( extends
) を追加してから、メソッドをオーバーライドして、カスタム オブジェクトのリストのcompareTo
標準的な動作を再作成することができます。sort()
詳細については、この他の関連する StackOverflow answer を確認してください。
これを実現するための1行のコードを次に示します。
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
一般に、セスの詳細な回答に1点だけ追加するには、
(a, b) => foo(a, b)
に渡されるsort
と、関数foo
は次のように整数の結果を返す必要があります。
- a < b の場合、結果は < 0 になるはずです。
- a = b の場合、結果は = 0 である必要があります。
- a > b の場合、結果は > 0 になります。
上記の三分法が成り立つためには、 と の両方が sa
でb
なければなりませんComparable
。
今日以降、 list.sort() を実行できるはずです。sort メソッドの引数はオプションになり、要素自体で compareTo を呼び出す関数がデフォルトになります。String は Comparable であるため、今すぐ機能するはずです。
この問題をどのように解決したか。
List<Product> _dataSavingListProducts = [];
List<Product> _dataSavingListFavoritesProducts = [];
void _orderDataSavingLists() {
_dataSavingListProducts.toList().reversed;
_dataSavingListFavoritesProducts.toList().reversed;
}