Как установить литералы после Dart 2.2 - PullRequest
0 голосов
/ 09 июня 2019

Установка литералов не поддерживалась до 2.2, Как установить литералы после Dart 2.2.Пожалуйста, не стесняйтесь комментировать.Спасибо.

class item_t {
  String name;
  int weight;
  int value;
}

main() {
  const List<item_t> items = [
    {'map', 9, 1}, // reports errors
  ];
}

обновление 1

Я мог бы определить список как серию определений операторов.Однако кажется, что это неэффективно.

class item_t {
  String name;
  int weight;
  int value;
}

main() {
  // final item_t items = new item_t(100);
  List<item_t> items = new List(2);

  items[0].name = 'map';
  items[0].weight = 9;
  items[0].value = 1;

}

На языке C я могу эффективно определить структуру, но я не знаю, как это сделать в дротике.

typedef struct {
    char *name;
    int weight;
    int value;
} item_t;

item_t items[] = {
    {"map",                      9,   150},
    {"compass",                 13,    35},
    {"water",                  153,   200},
};

обновление 2

Спасибо, что посоветовал jamesdlin, я могу упростить инициализацию списка и получить доступ к элементу по индексу.Тем не менее, он по-прежнему не может быть столь же эффективным, как язык C.

 var mySet = [
    {"map", 9, 150},
    {"compass", 13, 35},
    {"water", 153, 200},
    {"sandwich", 50, 160},
    {"glucose", 15, 60},
    {"tin", 68, 45},
    {"banana", 27, 60},
    {"apple", 39, 40},
    {"cheese", 23, 30},
    {"beer", 52, 10},
    {"suntan cream", 11, 70},
    {"camera", 32, 30},
    {"T-shirt", 24, 15},
    {"trousers", 48, 10},
    {"umbrella", 73, 40},
    {"waterproof trousers", 42, 70},
    {"waterproof overclothes", 43, 75},
    {"note-case", 22, 80},
    {"sunglasses", 7, 20},
    {"towel", 18, 12},
    {"socks", 4, 50},
    {"book", 30, 10}
  ];

  print(mySet[0].elementAt(1));

1 Ответ

3 голосов
/ 10 июня 2019

Вы используете { и } для указания SetMap) литералов:

var mySet = {1, 2, 3};

Обратите внимание, что во избежание двусмысленности с литералами Map необходимо явно указать тип при создании пустого набора. Например:

var emptySet = <int>{};

Также см. https://dart.dev/guides/language/language-tour#sets

...