リストのソート
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 7/65。
リスト内の要素を整理する必要がある場合、Dartは要素を昇順に並べ替えるsort()メソッドを提供しています。このメソッドは、名前をアルファベット順に並べたり、数値を小さい順に並べたりするのに特に便利です。
sort() メソッドは、新しいソート済みリストを作成するのではなく、元のリストを直接変更します。リストに対して sort() を呼び出すと、既存の要素がその場で並べ替えられます。
List<String> names = ['Charlie', 'Alice', 'Bob'];
names.sort();
print(names); // ['Alice', 'Bob', 'Charlie']
List<int> scores = [85, 92, 78, 96];
scores.sort();
print(scores); // [78, 85, 92, 96]sort()メソッドは、文字列や数値などの一般的なデータ型に対して自動的に機能します。文字列の場合はアルファベット順にソートされ、数値の場合は小さい順(昇順)にソートされます。これにより、要素を予測可能な順序に並べる必要がある場合に、データを整理するための簡単なツールとなります。
チャレンジ
簡単料理をさまざまなカテゴリーに整理してレストランのメニューシステムを管理するプログラムを作成してください。プログラムは以下の手順を行う必要があります:
- レストラン名を表す文字列入力を読み込む
- 料理名を表す複数の文字列入力を読み込む(空の文字列を受け取ると入力は終了します)
sort()メソッドを使用して、料理をアルファベット順に並べ替える- 整理されたメニューを、以下に示す正確な形式で出力する
例えば、レストラン名が "Bella Vista" で、料理が "Pasta Carbonara"、"Caesar Salad"、"Grilled Salmon"、"Apple Pie" の場合、プログラムは次のように出力する必要があります:
Restaurant: Bella Vista
Original menu: [Pasta Carbonara, Caesar Salad, Grilled Salmon, Apple Pie]
Sorted menu: [Apple Pie, Caesar Salad, Grilled Salmon, Pasta Carbonara]
Total dishes: 4
Status: Menu organized alphabeticallyレストラン名が "Quick Bites" で、料理が "Burger"、"Pizza"、"Sandwich" の場合、プログラムは次のように出力する必要があります:
Restaurant: Quick Bites
Original menu: [Burger, Pizza, Sandwich]
Sorted menu: [Burger, Pizza, Sandwich]
Total dishes: 3
Status: Menu organized alphabeticallyレストラン名が "Cafe Corner" で、料理が "Coffee" 1つだけ提供された場合、プログラムは次のように出力する必要があります:
Restaurant: Cafe Corner
Original menu: [Coffee]
Sorted menu: [Coffee]
Total dishes: 1
Status: Menu organized alphabeticallyプログラムでは、料理をアルファベット順に並べ替えるために sort() メソッドを使用する必要があります。sort() は元のリストを直接変更するため、元のバージョンとソート後のバージョンの両方を表示したい場合は、ソートする前に元のリストのコピーを作成する必要があることに注意してください。
チートシート
sort()メソッドは、リストの要素を昇順に並べ替え、元のリストを直接変更します:
List<String> names = ['Charlie', 'Alice', 'Bob'];
names.sort();
print(names); // ['Alice', 'Bob', 'Charlie']
List<int> scores = [85, 92, 78, 96];
scores.sort();
print(scores); // [78, 85, 92, 96]文字列の場合、sort()は要素をアルファベット順に並べ替えます。数値の場合、小さい順から大きい順に並べ替えます。sort()は元のリストをその場で変更するため、元の順序を保持する必要がある場合は、まずコピーを作成してください。
自分で試してみよう
import 'dart:io';
void main() {
// レストラン名を読み込む
String? restaurantName = stdin.readLineSync();
// 空の文字列が入力されるまで料理名を読み込む
List<String> dishes = [];
String? dish;
while ((dish = stdin.readLineSync()) != null && dish!.isNotEmpty) {
dishes.add(dish);
}
// TODO: 以下にコードを記述してください
// 元のリストのコピーを作成し、ソートする
// 料理の総数を計算する
// 指定された出力形式でプリントする
// 結果を出力する
// print("Restaurant: $restaurantName");
// print("Original menu: $dishes");
// print("Sorted menu: $sortedDishes");
// print("Total dishes: $totalDishes");
// print("Status: Menu organized alphabetically");
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー