dart - 从 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
.
我正在尝试删除所有这些标签以在过滤器中使用,并且我需要删除重复项,因此将 hack 转换为 aset
然后返回到我可以排序的列表中。
最有效的方法是什么?
解决方案
转换为一组以避免重复是可以的。
我会把它写成文字:尝试:
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();
推荐阅读
- r - 如何使用遗传算法优化 knn 中的参数 k
- javascript - Bootstrap Tooltips,如何使用带有对齐的固定?
- oracle - 在 PL/SQL 过程中打开动态表名的游标
- javascript - 添加剪切路径在 D3 图中隐藏了我的 y 轴
- amazon-web-services - Cloudformation:API:s3:CreateBucket 访问被拒绝
- ios - Telegram(最简单)内联机器人在 iOS 上发送照片 2 次
- node.js - 如何在没有 Bitbucket 连接的情况下在 Azure 中部署聊天机器人(NodeJS)
- python - Python模块变量不起作用
- java - 使用 eclipse 调试 OpenJDK 源代码
- ios - 我的视图在屏幕外运行并且不会向下移动