0

配列に格納されている要素のインデックスを見つけようとしています。それらの要素のインデックスを取得しようとすると、最初の要素のインデックスが常に与えられます。例:

int[] arr = {3,5,6,7,2,3,11,14 };
        int index = Array.IndexOf(arr, 3);
        Console.WriteLine(index);
        Console.ReadLine();

3 のインデックスを 5 として取得したい場合でも、0 を返します。ロジック内の要素をスキップすることはできません。プログラムで毎回各要素をチェックする必要があります。可能な場合は助けてください。

よろしく。

4

6 に答える 6

1

検索された用語が配列に存在する回数に依存しないソリューションを検索していると思います。この場合、見つかった現在のアイテムで作業を実行するループが必要です

int[] arr = {3,5,6,7,2,3,11,14 };
int index = -1;
while((index = Array.IndexOf(arr, 3, index + 1)) != -1)
{
    Console.WriteLine(index);
}

Array.IndexOf (array, object, startindex)オーバーロードは、期待どおりに機能します

于 2013-05-07T10:55:52.077 に答える
1

IndexOf開始インデックスを取る配列のオーバーロードがあります。最初の項目のインデックスを使用して、次を見つけます。

int[] arr = {3,5,6,7,2,3,11,14 };

int index = Array.IndexOf(arr, 3);
Console.WriteLine(index);

int index2 = Array.IndexOf(arr, 3, index + 1);
Console.WriteLine(index2);

Console.ReadLine();
于 2013-05-07T10:53:33.973 に答える
0

以下を試してください:

int[] arrRepaetInd = new int[arr.Length];
int j=0,cnt=0;
for(int i=0;i<arr.Length;i++)
{
  j++;
  if(arr[i]==arr[i+1]
  {
    cnt++;
    arrRepaetInd[cnt]=arr[i];
    Console.WriteLine(arrRepaetInd[cnt]);
  }
}

arrRepaetInd 配列には、繰り返し要素のインデックスがあります。

于 2013-05-07T10:55:58.030 に答える
0

あなたが使用することができLINQ、 -hereSelect(IEnumerable<TSource>, Func<TSource, Int32, TResult>)MSDN リンクです。

var indexes = arr.Select((i, index) => new { Number = i, Index = index }).Where(x => x.Number == 3).Select(x => x.Index).ToArray();

次に、最後のインデックスを取得するには (それが必要な場合) LastOrDefault()、 を apose to として使用しToArrrayます。

于 2013-05-07T10:52:17.987 に答える
0

Select とフィルターを使用します。

public int[] IndexesOf<T>(T[] Values, T find) {
    return Values.Select((i,index) => new { index = index, value = i})
                 .Where(x => x.value == find)
                 .Select(x => x.index)
                 .ToArray();
}

または拡張メソッドとしても

public static class MyExtensions {
    public static int[] IndexesOf<T>(this T[] Values, T find) {
        return Values.Select((i,index) => new { index = index, value = i})
                     .Where(x => x.value == find)
                     .Select(x => x.index)
                     .ToArray();
    }
}

それからあなたはすることができます

var indexes = arr.IndexesOf(3);
于 2013-05-07T10:56:49.297 に答える