排序列表
本课属于 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",你的程序应输出:
Restaurant: Cafe Corner
Original menu: [Coffee]
Sorted menu: [Coffee]
Total dishes: 1
Status: Menu organized alphabetically你的程序必须使用 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");
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程控制中的所有课
自己练习: Dart 在线编译器