过滤大型列表以删除辅助列表中的对象

时间:2017-07-03 10:53:24

标签: c# linq

我实施了一些代码来对ticketmaster类别API调用进行排序,以便我只存储包含音乐类别的对象。

API返回一个巨大的列表。我有一个包含我想要保留的类别的整数列表。我可以将整个列表作为循环进行查看,但是我会在列表中查看大约100次来过滤掉我想要的内容,这看起来非常低效。

LINQ是否有一种简单的方法可以做到这一点?

3 个答案:

答案 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, de在此示例中。正如Flater在评论中建议的那样,其他解决方案可以是您想要的获取小列表中存在的项目(ab)。在这种情况下,使用Intersect

var result = largeList.Intersect(smallList).ToList();