首页 > 解决方案 > 以最快的方式使用另一个列表过滤一个列表?

问题描述

我有一个包含字段名称和价格的 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')  ];

我想以最快的方式根据第二个列表中的类别名称过滤食物列表。

标签: javascriptjavakotlindart

解决方案


使用两个列表将花费您 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]) }
}

推荐阅读