65

API ドキュメントにsort()メソッド onListがあることがわかりますが、パラメーターに必要なものがわかりません。現在必要とされているのは、非常に単純でまっすぐなアルファ比較です。

4

7 に答える 7

117

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 はtypedefor 関数エイリアスです。この場合、次のような関数のエイリアスです。

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 を確認してください。

于 2012-10-15T03:46:45.033 に答える
21

これを実現するための1行のコードを次に示します。

fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
于 2018-08-04T10:46:02.267 に答える
6

一般に、セスの詳細な回答に1点だけ追加するには、

(a, b) => foo(a, b)

に渡されるsortと、関数fooは次のように整数の結果を返す必要があります。

  • a < b の場合、結果は < 0 になるはずです。
  • a = b の場合、結果は = 0 である必要があります。
  • a > b の場合、結果は > 0 になります。

上記の三分法が成り立つためには、 と の両方が sabなければなりませんComparable

于 2012-10-15T08:42:59.300 に答える
1

今日以降、 list.sort() を実行できるはずです。sort メソッドの引数はオプションになり、要素自体で compareTo を呼び出す関数がデフォルトになります。String は Comparable であるため、今すぐ機能するはずです。

于 2012-10-17T14:23:38.287 に答える
-2

この問題をどのように解決したか。


  List<Product> _dataSavingListProducts = [];
  List<Product> _dataSavingListFavoritesProducts = [];

  void _orderDataSavingLists() {
    _dataSavingListProducts.toList().reversed;
    _dataSavingListFavoritesProducts.toList().reversed;
  }


于 2020-08-26T22:59:08.530 に答える