30

私は c# がArray.FindAllと を持っていることを知っていArray.IndexOfます。

Array.FindAllIndexOfを返すものはありますint[]か?

4

9 に答える 9

39
string[] myarr = new string[] {"s", "f", "s"};

int[] v = myarr.Select((b,i) => b == "s" ? i : -1).Where(i => i != -1).ToArray();

これは 0, 2 を返します

値が配列に存在しない場合は、int[0] が返されます。

それの拡張メソッドを作る

public static class EM
{
    public static int[] FindAllIndexof<T>(this IEnumerable<T> values, T val)
    {
        return values.Select((b,i) => object.Equals(b, val) ? i : -1).Where(i => i != -1).ToArray();
    }
}

そしてそれを次のように呼び出します

string[] myarr = new string[] {"s", "f", "s"};

int[] v = myarr.FindAllIndexof("s");
于 2012-05-04T06:09:51.637 に答える
7

次のように書くことができます:

string[] someItems = { "cat", "dog", "purple elephant", "unicorn" }; 
var selectedItems = someItems.Select((item, index) => new{
    ItemName = item,
    Position = index});

また

var Items = someItems.Select((item, index) => new{
    ItemName = item,
    Position = index}).Where(i => i.ItemName == "purple elephant");

Read : LINQ を使用して特定の項目のインデックスを取得します

于 2012-05-04T06:06:31.187 に答える
5

指定された述語によって定義された条件に一致する要素を検索し、System.Array 全体内で出現するすべてのゼロから始まるインデックスを返します。

public static int[] FindAllIndex<T>(this T[] array, Predicate<T> match)
{
    return array.Select((value, index) => match(value) ? index : -1)
            .Where(index => index != -1).ToArray();
}
于 2013-03-08T13:52:52.300 に答える
2

いいえ、ありません。ただし、独自の拡張メソッドを作成できます。

public static int[] FindAllIndexOf<T>(this T[] a, Predicate<T> match)
{
   T[] subArray = Array.FindAll<T>(a, match);
   return (from T item in subArray select Array.IndexOf(a, item)).ToArray();
}

次に、配列に対して呼び出します。

于 2012-05-04T06:24:08.753 に答える
1

インデックスを指定してfindIndexでループできます

string[] arr = { "abc", "asd", "def", "abc", "lmn", "wer" };
int index = -1;
do
{
    index = Array.IndexOf(arr, "abc", index + 1);
    System.Console.WriteLine(index);
} while (-1 != index);
于 2012-05-04T06:14:59.240 に答える