#dart
Вопрос:
Просто ищу более эффективный способ сделать это в Dart:
List<String> tagStrings = List();
List<TagCategory> categories = List();
source.forEach(
(content) {
if (content.tagCategories != null) {
categories.addAll(content.tagCategories);
}
},
);
categories = categories.toSet().toList(); // remove duplicates
categories.forEach(
(element) {
List<Tag> tags = element.tags;
tags.forEach(
(tag) {
tagStrings.add(tag.label);
},
);
},
);
tagStrings = tagStrings.toSet().toList();
У меня есть список Trail
объектов со списком TagCategory
объектов, которые сами имеют список Tag
объектов со String
свойством, называемым label
.
Я пытаюсь удалить все эти теги для использования в фильтре, и мне нужно удалить дубликаты, следовательно, взломать, чтобы преобразовать их в a set
, а затем обратно в список, который я могу отсортировать.
Каков наиболее эффективный способ сделать это?
Ответ №1:
Преобразование в набор, чтобы избежать дублирования, — это нормально.
Я бы написал это буквально: Попробуйте:
var tags = [...{for (var tag in {for (var content in source) ...?content.tagCategories})
tag.label}];
Затем вы можете беспокоиться о том, действительно ли вам нужно удалять дубликаты в категориях тегов, если вы все равно удаляете дубликаты в ярлыках впоследствии.
Если бы производительность была единственной целью, то я бы, вероятно, сделал что-то более важное, например:
var set = <String>{}
for (var content in source) {
var categories = content.tagCategories;
if (categories != null) {
for (var category in categories) set.add(category.label);
}
}
var tagStrings = set.toList();