Menu
CoddyTech

排序列表

本课属于 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() 方法可以自动处理字符串和数字等常见数据类型。对于字符串,它会按字母顺序排序;对于数字,它会从小到大排序。这样一来,每当你需要按可预测的顺序排列元素时,就可以轻松地用它来整理数据。

challenge icon

挑战

简单

编写一个程序,通过将菜品分类来管理餐厅菜单。你的程序应当:

  1. 读取一个表示餐厅名称的字符串输入
  2. 读取多个表示菜品名称的字符串输入(收到空字符串时,输入结束)
  3. 使用 sort() 方法按字母顺序排列菜品
  4. 按照下方所示的准确格式输出整理后的菜单

例如,如果餐厅名称是 "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");
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器