Dart リスト(配列)を文字列の長さでソートする

Dartで、リスト(配列)を文字列の長さでソートするコードを記述してます。「sort」関数に「compare」で各値の「length」で文字の長さを取得してソートします。降順にする方法は2パターンあります。「const」を指定したリストに対して実行するとエラーが発生します。
環境
- OS windows11 home
- Dart 2.18.1
文字列の長さでソート
文字列の長さでソートするには「sort」に「compare」関数で「length」で各文字の長さを取得して使用します。
リスト.sort((a, b) => a.length.compareTo(b.length))
実際に使用して、ソートしてみます。
void main() {
final list = ['aaa','c','bb','dddd'];
list.sort((a, b) => a.length.compareTo(b.length));
print(list); // [c, bb, aaa, dddd]
}
実行結果を見ると、ソートされていることが確認できます。

降順
降順にソートする場合は、「-1」をかけてあげてます。
void main() {
final list = ['aaa','c','bb','dddd'];
list.sort((a, b) => -1 * a.length.compareTo(b.length));
print(list); // [dddd, aaa, bb, c]
}
ただし、空の配列に使用するとエラーとなります。
void main() {
final list = [];
list.sort((a, b) => -1 * a.length.compareTo(b.length));
print(list); // []
}
main.dart:4:26: Error: A value of type 'num' can't be returned from a function with return type 'int'.
list.sort((a, b) => -1 * a.length.compareTo(b.length));
「reversed」を使用して反転させる方法もあり、こちらの場合は空の配列でもエラーになりません。
void main() {
final list = ['aaa','c','bb','dddd'];
list.sort((a, b) => a.length.compareTo(b.length));
print(list.reversed.toList()); // [dddd, aaa, bb, c]
}
定数
「const」で宣言したリストに使用するとエラー「Unsupported operation: Cannot modify an unmodifiable list」が発生します。
void main() {
const list = ['aaa','c','bb','dddd'];
list.sort((a, b) => a.length.compareTo(b.length));
print(list);
}
Unhandled exception:
Unsupported operation: Cannot modify an unmodifiable list
#0 UnmodifiableListMixin.sort (dart:_internal/list.dart:149:5)
#1 main (file:///c:/sample/main.dart:4:8)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
「final」の場合は、メモリ領域は変更できるためエラーにはなりません。
void main() {
final list = ['aaa','c','bb','dddd'];
list.sort((a, b) => a.length.compareTo(b.length));
print(list); // [c, bb, aaa, dddd]
}
-
前の記事
Visual Studio 2022 ブックマークウィンドウを開くショートカットキー 2022.11.06
-
次の記事
javascript 配列の指定した位置に要素を入れる 2022.11.06
コメントを書く