Как я могу связать списки? - PullRequest
0 голосов
/ 14 апреля 2020

Знаете ли вы способ вставки объектов из другого списка в список? Вот так:

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

Возможно, сейчас это звучит странно, но я хотел бы кратко объяснить вам, зачем мне это нужно. Как видите, у меня есть разные списки еды. Теперь я хотел бы создать список Top10, который показывает 10 лучших блюд из всех блюд. Таким образом, каждый FoodItem из топ10 также является членом других списков. Например, если лучший di sh - это пицца прошутто, то di sh находится под номером 1 в списке Top10, но также и в списке пиццы.

Теперь переменная объекта FoodItem имеет вид время от времени менялись при использовании приложения. Я хочу, чтобы изменения в переменной были видны в других списках.

Вы понимаете?

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020

Вы можете вставить объект из списка в другой с помощью:

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

В этом примере кода вы вставляете первый элемент из списка пицц в позицию 2 списка top10. Важно знать, что когда вы вставляете объект из списка, вы вставляете ссылку на объект, а не делаете копию этого объекта, поэтому объект остается тем же. Если вы отредактируете свойство в объекте пиццы, вы увидите изменения и в объекте top10 (это оба одинаковые объекты).

0 голосов
/ 14 апреля 2020

Я думаю, что в FoodItem есть поле для оценки, чтобы оценить, лучше ли оно, чем другое. Если это так, вы можете добавить функцию сравнения:

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

Затем вы можете получить список отсортированных продуктов:

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

Для top10:

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);
}
0 голосов
/ 14 апреля 2020

Вы почти на месте.

Вы можете определить top10 как 'FoodItems', если оттуда унаследованы классы Pizza, Burger и Snack. Если это невозможно по какой-либо причине, вы можете определить top10 как List. Окно отладки слева на снимке экрана ниже показывает, что 'universalList' содержит два списка - пиццы и пасты.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...