【问题标题】:How can I link lists?如何链接列表?
【发布时间】:2020-07-26 23:30:21
【问题描述】:

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

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

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

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

你明白吗?

【问题讨论】:

  • 您的列表已经定义为包含对FoodItem 对象的引用(因此该列表实际上并不包含对象本身)。因此,如果同一个对象在两个列表中被引用,那么来自一个列表的更新也会自动出现在另一个列表中。
  • 是的,因为这些 FoodItem 对象是通过引用分配的。你理解按引用赋值和按值赋值吗?

标签: flutter dart flutter-layout flutter-web


【解决方案1】:

我认为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);
}

【讨论】:

  • 这真是太聪明了!感谢您快速详细的回答!所以只能筛选出我要转入数据库的菜品!谢谢我的朋友:D
【解决方案2】:

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

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

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

【讨论】:

  • 哦,那真是太棒了!我一直在寻找这样一个简单的解决方案!是不是也反过来了?因此,如果我在 top10 中更改某些内容。更改也会显示在比萨饼中吗?
  • 是的,如果你从 top10 编辑一个对象,你会看到比萨饼的变化,因为它是同一个对象。
【解决方案3】:

你快到了。

您可以将 top10 定义为“FoodItems”,提供的 Pizza、Burger 和 Snack 类从那里继承。如果由于任何原因无法实现,则可以将 top10 定义为 List。下面屏幕截图左侧的调试窗口显示“universalList”包含两个列表 - 比萨饼和意大利面。

【讨论】:

  • 所以我只能在top10中整合完整的列表吧?
  • 根据需要提供已过滤列表的完整列表。例如,universalList.add(pastas.where((pasta) =&gt; pasta.price &lt;= 10); 我只是给了你一个示例代码来演示它是如何工作的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2012-04-20
  • 2019-06-17
  • 2014-03-02
相关资源
最近更新 更多