0

重複の可能性:
リスト インデックス検索

値が同じ int[] でインデックスを取得する必要があるため、int[] で同じ値のすべてのインデックス num を取得する必要があります。

元。

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

私は使っている

Array.indexOf(xx, 4);

0を返しますが、0と2を取得したい.

4

5 に答える 5

5

どうですか

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

ここで私の元の答えを読んでください。

于 2012-09-22T07:20:00.683 に答える
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++;
    }
}

次のように使用します。

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

本当に必要な場合は、カスタム比較機能を使用してオーバーロードを作成できます。

于 2012-09-22T07:21:41.553 に答える
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);
    }
}
于 2012-09-22T07:26:52.467 に答える
0

イテレータを使用してそれを行うことができます。

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];
      }
  }
}
于 2012-09-22T07:22:58.947 に答える
0

次のようなメソッドを単純に使用できます (配列ではなくシーケンスを使用しても問題ない場合)。

static IEnumerable<int> AllIndexesOf(int[] xx, int value) {
    for (int i = 0; i < xx.Length; ++i) {
        if (xx[i] == 4) {
            yield return i;
        }
    }    
}
于 2012-09-22T07:24:16.197 に答える