获取List <string>中的字符串索引

时间:2015-10-20 01:30:22

标签: c# linq

使用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;
}

2 个答案:

答案 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();