获取列表中值的匹配索引

时间:2018-02-15 20:23:23

标签: c# list

所以我得到了以下代码:

string matchingName = "Bob";
List<string> names = GetAllNames();
if (names.Contains(matchingName))
    // Get the index/position in the list of names where Bob exists

是否可以使用几行代码执行此操作,而不是遍历列表以获取索引或位置?

3 个答案:

答案 0 :(得分:0)

# cat /proc/<process id from above>/limits
...

答案 1 :(得分:0)

如果您有多个匹配的实例,并希望获得所有索引,则可以使用:

cat foo.txt | gawk '{ printf $0 }'

如果它只是您想要的一个索引,那么这将起作用:

var result = Enumerable.Range(0, names.Count).Where(i => names[i] == matchingName);

如果int result = names.IndexOf(matchingName); 中没有匹配的实例,前一个解决方案将产生一个空枚举,而后者将产生-1。

答案 2 :(得分:0)

如果您想查找匹配,那么IndexOf将符合您的目的。

如果您想查找多个匹配项,请考虑:

var names = new List<string> {"Bob", "Sally", "Hello", "Bob"};

var bobIndexes = names.Select((value, index) => new {value, index})
    .Where(z => z.value == "Bob")
    .Select(z => z.index);

Console.WriteLine(string.Join(",", bobIndexes)); // this outputs 0,3

Select中使用(value, index)可让您访问元素的索引。