リストの反転
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 3/65。
リストの要素を逆順で表示したい場合があります。Dartは、元のリストを変更せずにリストの逆順ビューを作成する .reversed プロパティを提供しています。
.reversed プロパティは、リストの要素を逆順で提示するイテラブルを返します。これは、最後の要素が最初に現れ、最後から2番目の要素が2番目に現れ、といった具合に続くことを意味します。
List<int> numbers = [1, 2, 3, 4, 5];
var reversedNumbers = numbers.reversed;
print(reversedNumbers); // (5, 4, 3, 2, 1)
// 元のリストは変更されません
print(numbers); // [1, 2, 3, 4, 5]重要な点は、.reversed はリストではなくイテラブルを返すということです。リストとして扱う必要がある場合は、.toList() を使用して変換できます。このプロパティは、元のリストをそのまま保持しながら、データを逆順で処理する必要がある場合に特に便利です。
チャレンジ
簡単読書リストを分析し、本のタイトルを元の順序と逆の順序の両方で表示するプログラムを作成してください。プログラムは以下の手順を実行する必要があります:
- 読書リストのタイトルを表す文字列入力を読み込む
- 本のタイトルを表す複数の文字列入力を読み込む(空の文字列を受け取ると入力は終了します)
.reversedプロパティを使用して、本のリストの逆順ビューを作成する- 以下の形式で読書リストの分析結果を出力する
例えば、読書リストのタイトルが "Summer Reading" で、本が "1984"、"To Kill a Mockingbird"、"The Great Gatsby" の場合、プログラムは以下のように出力する必要があります:
Reading List: Summer Reading
Books in original order: (1984, To Kill a Mockingbird, The Great Gatsby)
Books in reversed order: (The Great Gatsby, To Kill a Mockingbird, 1984)
Total books: 3読書リストのタイトルが "Quick Reads" で、本が "Animal Farm" 1冊のみ提供された場合、プログラムは以下のように出力する必要があります:
Reading List: Quick Reads
Books in original order: (Animal Farm)
Books in reversed order: (Animal Farm)
Total books: 1プログラムでは、逆順で本を表示するために必ず .reversed プロパティを使用してください。.reversed はイテラブル(iterable)を返すため、出力時には角括弧([])ではなく丸括弧(())で表示されることに注意してください。
チートシート
.reversedプロパティを使用すると、元のリストを変更せずに、リストの要素を逆順で表示できます。
List<int> numbers = [1, 2, 3, 4, 5];
var reversedNumbers = numbers.reversed;
print(reversedNumbers); // (5, 4, 3, 2, 1)
// 元のリストは変更されません
print(numbers); // [1, 2, 3, 4, 5].reversedプロパティは、リストではなくイテラブル(iterable)を返します。リストに戻すには、.toList()を使用します。
自分で試してみよう
import 'dart:io';
void main() {
// 読書リストのタイトルを読み込む
String? title = stdin.readLineSync();
// 空の文字列が入力されるまで本のタイトルを読み込む
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// TODO: ここにコードを記述してください
// .reversed プロパティを使用して、books リストの逆順ビューを作成します
// 指定された形式で出力を表示します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー