我是编程新手,正在学习 Dart 课程。我正在尝试构建一个待办事项列表控制台程序,并使用地图作为待办事项列表。我正在尝试弄清楚如何自动分配键,以便当我删除一个条目时,后面的键会相应更改(例如,删除第二个条目并将前一个第三个条目的键更改为 2,依此类推)。
我该如何处理呢?
这是我迄今为止添加条目的代码:
int taskId = toDoList.length;
case 'c' :
userInput = null;
print('Enter name of new adventure');
print('');
if (taskId >= toDoList.length) {
++taskId;
}
String task = stdin.readLineSync()!;
toDoList[taskId] = task;
print('Quest added!');
for (final allPrint in mainMenu.entries) {
print('${allPrint.key}: ${allPrint.value}');
} ;
这是我删除条目的代码:
case 'b' :
userInput = null;
if (toDoList.length < 1) {
print('No quests available to complete!');
for (final allPrint in mainMenu.entries) {
print('${allPrint.key}: ${allPrint.value}');
};
} else{
print('Which good fortune have you brought from your adventures?');
print('Which task have you completed?');
print('');
for (final allPrint in toDoList.entries) {
print('${allPrint.key}: ${allPrint.value}');
}
print('');
print('');
int? idDelete = int.tryParse(stdin.readLineSync() ?? '');
if (toDoList.containsKey(idDelete)) {
toDoList.remove(idDelete);
print('Good Job!');
for (final allPrint in mainMenu.entries) {
print('${allPrint.key}: ${allPrint.value}');
} ;
}
}
这里的内容相当于数据库引擎(例如 PostgreSQL)中的自动增量功能。当您向具有自动增量列的数据库表中添加一行时,该列(通常称为 ID)从 0 开始,一直到定义的数据类型的限制。但是,如果从包含 20 行的表中删除了添加的第二行,则数据库不会重新索引所有 18 个后续元素,因为这样效率会非常低:如果表有 200 行怎么办?
无论如何,你需要这样的东西:
在这种情况下可以做的是隐藏用户的 ID,当您需要显示地图时,只需按键对地图条目进行排序:
但请注意,无论何时您需要显示地图,您都必须事先对所有项目进行排序。
因此,在使用地图时会遇到两个问题:删除元素时重新索引所有元素(如果决定删除多个元素,逻辑将变得更加复杂),或者显示地图时对所有元素进行排序。
基本上,a在这里
Map<int, String>
不是一个好的选择。请注意,映射中的每个键都严格从 1(第一个元素索引)到N(最后一个元素索引)。因此,虽然您可以使用映射来表示 TODO 列表,但最佳做法是使用普通
List<String>
映射,其索引从 0 到N-1: