Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过传递单个值获取多个索引_C#_Arrays - Fatal编程技术网

C# 通过传递单个值获取多个索引

C# 通过传递单个值获取多个索引,c#,arrays,C#,Arrays,可能重复: 我必须在int[]中获取索引,其中的值是相同的,因此我必须获取int[]中相同值的所有索引num 前 我正在使用 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); 阅读我的原始答案。我不认为这

可能重复:

我必须在int[]中获取索引,其中的值是相同的,因此我必须获取int[]中相同值的所有索引num

我正在使用

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);

阅读我的原始答案。

我不认为这有任何内置的一行代码(Nikhil的方法与LINQ的方法非常接近),但很容易编写:

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

如果您真的愿意,您可以使用自定义比较器编写重载。

您可以使用迭代器

public IEnumerable<int>
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];
      }
  }
}
公共IEnumerable
GetIndexes(int[]xx,int-toSearch)
{
//产生范围内的偶数。
对于(int i=0;i
您可以简单地使用这样的方法(如果可以使用序列而不是数组):

静态IEnumerable allindexosf(int[]xx,int-value){
对于(int i=0;i
这是因为
IndexOf
表示
FirstIndexOf
。与之相反的是
LastIndexOf
+1,我的想法是一样的,但更快更通用:)这里的
result
不是没用吗?@PaoloTedesco:是的,对不起-上一版本的遗留。谢谢Nikhil ji。它起作用了。
foreach (var index in array.FindAllIndexes(4))
{
    ...
}
public IEnumerable<int>
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];
      }
  }
}
static IEnumerable<int> AllIndexesOf(int[] xx, int value) {
    for (int i = 0; i < xx.Length; ++i) {
        if (xx[i] == 4) {
            yield return i;
        }
    }    
}
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);
    }
}