我如何 link 列表?

How can I link lists?

你知道将另一个列表中的对象插入到列表中的方法吗?像这样:

List<FoodItem> top10 = [
    pizza[1],
    burger[0],
    snacks[3],
  ];

这现在听起来可能令人困惑,但我想简要地向您解释一下我为什么需要它。 如您所见,我有不同的食物清单。我现在想创建一个 Top10 列表,显示所有菜肴中最好的 10 道菜。 所以来自 top10 的每个 FoodItem 也是其他列表的成员。 例如,如果最好的菜是 Prosciutto Pizza,那么这道菜在 Top10 列表中排名第一,但也在披萨列表中。

现在,在使用该应用程序时,FoodItem 的一个变量会不时更改。 我希望对变量的更改在其他列表中可见。

你明白了吗?

你快到了。

您可以将前 10 名定义为 'FoodItems',前提是比萨、汉堡和小吃 类 从那里继承。如果出于任何原因不可能,那么您可以将 top10 定义为列表。下面屏幕截图左侧的调试 window 显示 'universalList' 包含两个列表 - 比萨饼和意大利面。

您可以将列表中的对象插入到另一个列表中:

top10.add(2, pizzas.get(0));

在此示例代码中,您将比萨饼列表中的第一个元素插入到 top10 列表的第 2 位。重要的是要知道,当您从列表中插入一个对象时,您插入的是对该对象的引用,而不是该对象的副本,因此该对象是相同的。如果您在披萨的对象中编辑 属性,您也会在 top10 的对象中看到更改(它们都是相同的对象)。

我觉得FoodItem里面有一个score字段来判断它是否比另一个好。如果是这样,你可以添加一个比较功能:

int compareFood(FoodItem food1, FoodItem food2) => food1.score > food2.score ? -1 : 1;

然后,你可以得到一个排序的食物列表:

List<FoodItem> get sortedSnacks {
  var list = snacks.toList();
  list.sort(compareFood);
  return list;
}

前 10 名:

List<FoodItem> get allFoods => [
      ...pizaa,
      ...burger,
      ...snacks,
    ];

List<FoodItem> get top10 {
  var list = allFoods.toList();
  list.sort(compareFood);
  return list.sublist(0, list.length >= 10 ? 10 : list.length);
}