使用LINQ是否有更优雅的方式来实现以下代码? 基本上我想获得一个列表,列出一个列表中的字符串在另一个列表中的位置。
private List<int> GetColumnIndexesToIgnore(
ReadOnlyCollection<string> listOfColumnsToIgnore, List<string> columnHeadings)
{
List<int> columnIndexesToIgnore = new List<int>();
for (int i = 0; i < columnHeadings.Count; i++)
{
if (listOfColumnsToIgnore.Contains(columnHeadings[i]))
{
columnIndexesToIgnore.Add(i);
}
}
return columnIndexesToIgnore;
}
答案 0 :(得分:6)
您可以使用LINQ这样做:
var res = columnHeadings
.Select((v, i) => new {Value = v, Index = i})
.Where(p => listOfColumnsToIgnore.Contains(p.Value))
.Select(p => p.Index)
.ToList();
第一个Select
对的值及其索引,Where
子句过滤掉您不想要的对,第二个Select
收回索引,{{1}从它们中取出ToList
。
答案 1 :(得分:2)
您可以获取匹配项的索引和其他项的索引,然后过滤掉-1值:
List<int> columnIndexesToIgnore = columnHeadings
.Select((c, i) => listOfColumnsToIgnore.Contains(c) ? i : -1)
.Where(i => i != -1)
.ToList();