重複の可能性:
リスト インデックス検索
値が同じ int[] でインデックスを取得する必要があるため、int[] で同じ値のすべてのインデックス num を取得する必要があります。
元。
int[] xx = {4,5,4,3,2}
私は使っている
Array.indexOf(xx, 4);
0を返しますが、0と2を取得したい.
重複の可能性:
リスト インデックス検索
値が同じ int[] でインデックスを取得する必要があるため、int[] で同じ値のすべてのインデックス num を取得する必要があります。
元。
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);
ここで私の元の答えを読んでください。
このための組み込みのワンライナーはないと思いますが(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))
{
...
}
本当に必要な場合は、カスタム比較機能を使用してオーバーロードを作成できます。
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);
}
}
イテレータを使用してそれを行うことができます。
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;
}
}
}