获取多个索引传递单个值

可能重复:
列表索引搜索

我必须在int []中得到索引,其中value将是相同的,因此我必须得到int []中相同值的所有索引号。

恩。

int[] xx = {4,5,4,3,2} 

我在用

 Array.indexOf(xx, 4); 

它将返回0但我想得到0和2。

怎么样

 int[] xx = {4,5,4,3,2}; int search = 4; var result = xx.Select((b, i) => b.Equals(search) ? i : -1).Where(i => i != -1); 

在这里阅读我的原始答案。

 using System; using System.Linq; class Program { static void Main(string[] args) { int[] xx = { 4, 5, 4, 3, 2 }; int findValue = 4; var indexes = xx.Select((val, index) => new { Value = val, Index = index }) .Where(x => x.Value == findValue) .Select(x => x.Index); foreach (var index in indexes) Console.WriteLine(index); } } 

我认为没有任何内置的单行程(Nikhil的方法与LINQ一样接近),但它很容易编写:

 public static IEnumerable FindAllIndexes(this IEnumerable haystack, T needle) where T : IEquatable { int index = 0; foreach (var item in haystack) { if (item.Equals(needle)) { yield return index; } index++; } } 

用它作为:

 foreach (var index in array.FindAllIndexes(4)) { ... } 

如果你真的想要,可以使用自定义比较器编写重载。

您可以简单地使用这样的方法(如果可以使用序列而不是数组):

 static IEnumerable AllIndexesOf(int[] xx, int value) { for (int i = 0; i < xx.Length; ++i) { if (xx[i] == 4) { yield return i; } } } 

您可以使用迭代器来完成它。

 public IEnumerable GetIndexes(int[] xx, int toSearch ) { // Yield even numbers in the range. for (int i= 0; i < xx.Length; i++) { if (xx[i] == toSearch) { yield return xx[i]; } } }