Dart - заполняйте карту программно из перечисления и списка - PullRequest
1 голос
/ 10 января 2020

Я хочу заполнить карту программно, но я не знаю, как это сделать. Также мне нужно, чтобы tagname было постоянным.

Я сделал это вручную, но если у вас есть тысяча значений тегов, вы должны написать тысячу строк кода:

enum Tag { tag1, tag2, tag3, tag4, tag5 }

Map<Tag, String> tagname = {
  Tag.values[0]: 'Tag 1',
  Tag.values[1]: 'Tag 2',
  Tag.values[2]: 'Tag 3',
  Tag.values[3]: 'Tag 4',
  Tag.values[4]: 'Tag 5',
};

Я хочу заполнить tagname:

const List<String> tagtitles = ['Tag 1', 'Tag 2', 'Tag 3', 'Tag 4'];

, а если tagtitles.lenght <<code>Tag.values.lenght, то заполнить "пустой" строкой.

Можете ли вы мне помочь? Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 января 2020

Если вы предполагаете, что tagTitles и перечисление Tag имеют одинаковый порядок элементов, вы можете сделать следующее:

enum Tag { tag1, tag2, tag3, tag4 }

const List<String> tagTitles = ['Tag 1', 'Tag 2', 'Tag 3'];
Map<Tag, String> tagName = Map();
Tag.values.asMap().forEach((index, tag) =>
    tagName[tag] = index < tagTitles.length ? tagTitles[index] : 'empty');

Карта будет выглядеть примерно так

{Tag.tag1: Tag 1, Tag.tag2: Tag 2, Tag.tag3: Tag 3, Tag.tag4: empty}

И вы можете использовать tagName[Tag.tag1] для доступа к элементу на карте.

0 голосов
/ 10 января 2020

Самый короткий путь, вероятно, будет:

var tagName = {for (var tag in Tag.values)
    tag: (tag.index < tagTitles.length ? tagTitles[tag.index] : "empty")};

Он по-прежнему не может быть постоянным.

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