javascript - 以最快的方式使用另一个列表过滤一个列表?
问题描述
我有一个包含字段名称和价格的 Food 对象列表。我有其他类别的对象列表,其中包含字段food_name
及其category_name
.
现在,我想根据category_name
第二个列表中的过滤第一个列表。我怎样才能以最快的方式做到这一点?
我标记了几种语言,因为我只需要任何语言的过滤逻辑。
例如在 Dart
List<Food> foods = [Food(name: 'Mango', price: 50), Food(name: 'Cucumber', price: 100)];
List<Category> categories = [Category(name: 'Fruits', foodName: 'Mango'), Category(name: 'Vegetables', foodName: 'Cucumber') ];
我想以最快的方式根据第二个列表中的类别名称过滤食物列表。
解决方案
使用两个列表将花费您 O(n^2) 的时间,您应该考虑使用映射结构。在 Kotlin 中,这可以作为
val map = foodList.associateBy { it.name }
val result = mutableListOf<Food>()
categoryList.forEach {
if(map.containsKey(it.foodName)) { result.add(map[it.foodName]) }
}
推荐阅读
- linux - Clonezilla 还是什么?
- java - ReactiveCrudRepository 不在数据库中保存对象
- argo-workflows - 无需中间步骤即可将参数转换为工件
- r - 如何在R中配对两个向量的元素
- docker - Docker Swarm - 服务只能从管理节点主机访问(而不是从工作节点)
- javascript - axios 获取数据
- amazon-web-services - 如何在 route53 hostsZone 中创建记录
- sql-server - 以不同于 SQL Server 代理的用户身份运行作业步骤
- web-applications - Instagram API:允许用户在验证时切换帐户(无需注销)
- apache-nifi - Apache Nifi - 使用相对路径使流定义可移植