SORU
17 AĞUSTOS 2009, PAZARTESİ


Nasıl bir IEnumerable bir öğe dizini alınamadı?

Ben yazdım:

public static class EnumerableExtensions
{
    public static int IndexOf<T>(this IEnumerable<T> obj, T value)
    {
        return obj
            .Select((a, i) => (a.Equals(value)) ? i : -1)
            .Max();
    }

    public static int IndexOf<T>(this IEnumerable<T> obj, T value
           , IEqualityComparer<T> comparer)
    {
        return obj
            .Select((a, i) => (comparer.Equals(a, value)) ? i : -1)
            .Max();
    }
}

Ama eğer zaten varsa, bilmiyorum, değil mi?

CEVAP
17 AĞUSTOS 2009, PAZARTESİ


Bilgeliği, ama belki isterim:

source.TakeWhile(x => x != value).Count();

ama -1 dönmek için ise bulunamadı izlemek gerekir (EqualityComparer<T>.Default gerekirse != taklit kullanarak) - ... o yüzden belki de sadece uzun yol yapmak

public static int IndexOf<T>(this IEnumerable<T> source, T value)
{
    int index = 0;
    var comparer = EqualityComparer<T>.Default; // or pass in as a parameter
    foreach (T item in source)
    {
        if (comparer.Equals(item, value)) return index;
        index  ;
    }
    return -1;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009