c# - सूची में डुप्लिकेट वैल्यू को निकालने का सबसे तेज़ तरीका<> lambda द्वारा




list c#-4.0 (5)

सूची से डुप्लिकेट मानों को हटाने का सबसे तेज़ तरीका क्या है। List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 }; इसलिए मैं डुप्लिकेट को हटाने के लिए लैम्ब्डा का उपयोग करने में रूचि रखता हूं और लौटाता हूं: {1, 2, 3, 4, 5} । आपका क्या सुझाव है?


अलग () विधि है। यह काम करना चाहिए।

List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 };
var distinctList = longs.Distinct().ToList();

आप इस विस्तार विधि का उपयोग अधिक जटिल प्रकार वाले गणित के लिए कर सकते हैं:

IEnumerable<Foo> distinctList = sourceList.DistinctBy(x => x.FooName);

public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector)
{
    var knownKeys = new HashSet<TKey>();
    return source.Where(element => knownKeys.Add(keySelector(element)));
}

एक सरल अंतर्ज्ञानी कार्यान्वयन 'सार्वजनिक स्थैतिक सूची निकालें डुप्लिकेट (सूची सूची बिंदु) {सूची परिणाम = नई सूची ();

        for (int i = 0; i < listPoints.Count; i++)
        {
            if (!result.Contains(listPoints[i]))
                result.Add(listPoints[i]);
        }

        return result;
    }`

जगह में:

    public static void DistinctValues<T>(List<T> list)
    {
        list.Sort();

        int src = 0;
        int dst = 0;
        while (src < list.Count)
        {
            var val = list[src];
            list[dst] = val;

            ++dst;
            while (++src < list.Count && list[src].Equals(val)) ;
        }
        if (dst < list.Count)
        {
            list.RemoveRange(dst, list.Count - dst);
        }
    }

List<long> distinctlongs = longs.Distinct().OrderBy(x => x).ToList();






generic-list