13

Linq を使用して部分的なプレフィックスのリストからインデックスを見つける方法はありますか?

List<string> PartialValues = getContentsOfPartialList();
string wholeValue  = "-moz-linear-gradient(top,  #1e5799 0%, #7db9e8 100%)";
int indexOfPartial = PartialValues
                      .IndexOf(partialPrefix=>wholeValue.StartsWith(partialPrefix));

残念ながら、IndexOf()ラムダ式を受け入れません。これに似たLinqメソッドはありますか?

4

4 に答える 4

5

Tim が最も正しい答え ( https://stackoverflow.com/a/19792531/467172 ) を持っていますが、実際に拡張メソッドIEnumerable<T>が必要な場合は、次のような方法で実行できます。

public static int IndexOf<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
    int index = 0;
    foreach (var item in source)
    {
        if (predicate(item)) return index;
        index++;
    }

    return -1;
}
于 2013-11-05T16:12:44.630 に答える
4

ある場合は、受け入れられた回答List<T>を参照してください。

IEnumerableの代わりに (またはそれを実装する他のコレクション) がある場合Listは、次の LINQ コードを使用できます。

int index = PartialValues.TakeWhile(partialPrefix=> ! wholeValue.StartsWith(partialPrefix)).Count();

ラムダ式の否定演算子 (!) に注意してください。ラムダ式はtrue、条件に一致しない要素に対して返される必要があります。

条件に一致する要素がない場合、コードは要素の数を返します (たとえば、index は最後の要素の直後の位置を指します)。

于 2014-04-14T12:36:09.287 に答える
-1

Enumerable.Firstを使用できます

string partialStr = PartialValues.FirstOrDefault(partialPrefix=>wholeValue.StartsWith(partialPrefix);
int partialIndex = PartialValues.IndexOf(partialStr);
于 2013-11-05T15:23:44.450 に答える