[c#]indexof 数组使用 linq 除外

标签: Linq .Net C#
发布时间: 2017/2/28 22:56:31
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下两个列表

List<String> list1 = new List<String>();
list1.Add("one");
list1.Add("two");
list1.Add("three");
list1.Add("four");
list1.Add("five");

List<String> list2= new List<String>();
list2.Add("one");
list2.Add("two");
list2.Add("three");

IEnumerable<int> indexOfUnwantedColumns;
indexOfUnwantedColumns = list1.Except(list2)
                              .Select((p, i) => new { Item = p, Index = i })
                              .Select(p => p.Index);

一如外界预期,这会给这两个项目的索引在新列表中 (0 和 1)。我想要能得到那里索引值从原始列表 (3 和 4)

任何帮助将不胜感激

解决方法 1:

其主要思想是要捕获原始索引之前过滤,然后检查如果 list2 包含每个项目。为了能够有效地执行这些查找 (在 O(1) 聚合时间每次查找),您应该使用 hashset:

var hashset = new HashSet<string>(list2);
var unwantedColIndexes = list1
    .Select((item, idx) => new { item, idx })  // capture the original index
    .Where(i => !hashset.Contains(i.item))     // filter using the hashset
    .Select(i => i.idx)                        // get the index only
    .ToList();
赞助商