我实施了一些代码来对ticketmaster类别API调用进行排序,以便我只存储包含音乐类别的对象。
API返回一个巨大的列表。我有一个包含我想要保留的类别的整数列表。我可以将整个列表作为循环进行查看,但是我会在列表中查看大约100次来过滤掉我想要的内容,这看起来非常低效。
LINQ是否有一种简单的方法可以做到这一点?
答案 0 :(得分:1)
如果你有一个大过滤器列表,那么如果保留类别,诀窍就是使用哈希:O(1)
时间复杂度与O(N)
作为一个列表(" ...通过列表大约100次来过滤掉..."):
HashSet<int> CategoriesToKeep = new HashSet<int>(ListOfCategories);
...
var filtered = initialList
.Where(item => CategoriesToKeep.Contains(item.Category))
.ToList(); // if you want to materialize
答案 1 :(得分:0)
您正在寻找类似的东西:
var myCategories = .... //some enumeration of ints
var filteredInfo = GetTicketMasterCategoriesInfo().Where(
tm => myCategories.Contains(tm.Category));
答案 2 :(得分:0)
您对自己的问题有点不清楚,但可以尝试使用Except
方法
List<string> largeList = new List<string>() { "a", "b", "c", "d", "e" };
List<string> smallList = new List<string>() { "a", "b" };
var result = largeList.Except(smallList).ToList();
编辑:
这将为您提供不存在于小列表中的项目(c,
d
和e
在此示例中。正如Flater在评论中建议的那样,其他解决方案可以是您想要的获取小列表中存在的项目(a
和b
)。在这种情况下,使用Intersect
var result = largeList.Intersect(smallList).ToList();