Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में सूची से डुप्लिकेट तत्व हटाना (Distinct)


C# में किसी सूची (List<T>) से डुप्लिकेट (नकल) तत्वों को हटाने के लिए LINQ का Distinct() मेथड सबसे सरल और सामान्य तरीका है। यह एक नया अनुक्रम लौटाता है जिसमें केवल अद्वितीय (unique) तत्व होते हैं।

उदाहरण

using System;
using System.Collections.Generic;
using System.Linq;

public class Demo
{
    public static void Main()
    {
        // डुप्लिकेट वाली सूची
        List numbers = new List { 10, 20, 30, 40, 50, 30, 40, 50 };
        
        Console.WriteLine("मूल सूची:");
        Console.WriteLine($"  [{string.Join(", ", numbers)}]");
        Console.WriteLine($"  कुल तत्व: {numbers.Count}");
        
        // Distinct() से डुप्लिकेट हटाएं
        List distinctNumbers = numbers.Distinct().ToList();
        
        Console.WriteLine("\nडुप्लिकेट हटाने के बाद:");
        Console.WriteLine($"  [{string.Join(", ", distinctNumbers)}]");
        Console.WriteLine($"  कुल तत्व: {distinctNumbers.Count}");
    }
}

आउटपुट

मूल सूची:
  [10, 20, 30, 40, 50, 30, 40, 50]
  कुल तत्व: 8

डुप्लिकेट हटाने के बाद:
  [10, 20, 30, 40, 50]
  कुल तत्व: 5

कस्टम तुलना के साथ Distinct()

डिफॉल्ट रूप से Distinct() डिफॉल्ट समानता तुलनाकर्ता (equality comparer) का उपयोग करता है। कस्टम तुलना के लिए IEqualityComparer<T> लागू करें।

using System;
using System.Collections.Generic;
using System.Linq;

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class ProductNameComparer : IEqualityComparer
{
    public bool Equals(Product x, Product y)
    {
        if (x is null && y is null) return true;
        if (x is null || y is null) return false;
        return string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase);
    }
    
    public int GetHashCode(Product obj)
    {
        return obj.Name?.ToLowerInvariant().GetHashCode() ?? 0;
    }
}

public class Demo
{
    public static void Main()
    {
        var products = new List
        {
            new Product { Id = 1, Name = "Laptop", Price = 50000 },
            new Product { Id = 2, Name = "Mouse", Price = 500 },
            new Product { Id = 3, Name = "LAPTOP", Price = 45000 }, // डुप्लिकेट नाम (केस अलग)
            new Product { Id = 4, Name = "Keyboard", Price = 1500 }
        };
        
        Console.WriteLine("मूल सूची:");
        foreach (var p in products)
            Console.WriteLine($"  ID:{p.Id} Name:{p.Name} Price:₹{p.Price}");
        
        // कस्टम तुलनाकर्ता के साथ Distinct
        var uniqueProducts = products.Distinct(new ProductNameComparer()).ToList();
        
        Console.WriteLine("\nनाम के अनुसार अद्वितीय (केस-इनसेंसिटिव):");
        foreach (var p in uniqueProducts)
            Console.WriteLine($"  ID:{p.Id} Name:{p.Name} Price:₹{p.Price}");
    }
}

आउटपुट

मूल सूची:
  ID:1 Name:Laptop Price:₹50000
  ID:2 Name:Mouse Price:₹500
  ID:3 Name:LAPTOP Price:₹45000
  ID:4 Name:Keyboard Price:₹1500

नाम के अनुसार अद्वितीय (केस-इनसेंसिटिव):
  ID:1 Name:Laptop Price:₹50000
  ID:2 Name:Mouse Price:₹500
  ID:4 Name:Keyboard Price:₹1500

DistinctBy() - .NET 6+ / C# 10+ (सरल विकल्प)

// .NET 6+ के लिए (System.Linq में)
var uniqueByName = products.DistinctBy(p => p.Name).ToList();

// या की-सेलेक्टर के साथ (पुराने संस्करणों के लिए मैन्युअल)
var uniqueByNameOld = products
    .GroupBy(p => p.Name, StringComparer.OrdinalIgnoreCase)
    .Select(g => g.First())
    .ToList();

प्रदर्शन तुलना

using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;

public class Demo
{
    public static void Main()
    {
        // बड़ी सूची बनाएं (100,000 तत्व, कई डुप्लिकेट)
        var random = new Random(42);
        var largeList = new List(100000);
        for (int i = 0; i < 100000; i++)
            largeList.Add(random.Next(1, 1000)); // केवल 1000 अद्वितीय मान संभव
        
        var sw = Stopwatch.StartNew();
        var distinct1 = largeList.Distinct().ToList();
        Console.WriteLine($"Distinct(): {sw.ElapsedMilliseconds} ms, अद्वितीय: {distinct1.Count}");
        
        sw.Restart();
        var distinct2 = largeList.ToHashSet().ToList(); // HashSet विकल्प
        Console.WriteLine($"ToHashSet(): {sw.ElapsedMilliseconds} ms, अद्वितीय: {distinct2.Count}");
        
        // क्रम बनाए रखने के लिए
        sw.Restart();
        var seen = new HashSet();
        var distinct3 = largeList.Where(x => seen.Add(x)).ToList();
        Console.WriteLine($"HashSet+Where: {sw.ElapsedMilliseconds} ms, अद्वितीय: {distinct3.Count}");
    }
}

महत्वपूर्ण बिंदु

  • Distinct() मूल सूची को नहीं बदलता, नई सूची/अनुक्रम लौटाता है
  • क्रम (order) बने रहता है - पहली घटना रखी जाती है
  • ToList() या ToArray() कॉल करके भौतिक सूची/सरणी प्राप्त करें
  • संदर्भ प्रकारों के लिए डिफॉल्ट तुलना रेफरेंस समानता है (कस्टम IEqualityComparer उपयोग करें)
  • बड़े डेटासेट के लिए HashSet आधारित दृष्टिकोण तेज हो सकता है
  • DistinctBy() (.NET 6+) की-सेलेक्टर के साथ सरल सिंटैक्स प्रदान करता है
  1. - Python में सूची से डुप्लिकेट कैसे हटाएं

    आप Python में डुप्लिकेट को dict.fromkeys() का उपयोग करके हटा सकते हैं, जो एक डिक्शनरी उत्पन्न करता है जो किसी भी डुप्लिकेट मान को हटा देता है। आप सूची को सेट में भी बदल सकते हैं। डिक्शनरी या सेट को वापस सूची में बदलना होगा ताकि आप डुप्लिकेट हटाए गए सूची को देख सकें। जब आप Python में सूची के साथ क

  1. Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट कैसे हटाएं? Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट कैसे हटाएं?

    Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट हटाना यह उदाहरण दर्शाता है कि Android में सॉर्टेड लिंक्ड लिस्ट से डुप्लिकेट मान कैसे हटाए जाते हैं। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में कोड जोड़ें re

  1. एक्सेल ड्रॉप-डाउन सूचियों में डुप्लिकेट एंट्री हटाएं - 4 विशेषज्ञ तकनीकें एक्सेल ड्रॉप-डाउन सूचियों में डुप्लिकेट एंट्री हटाएं - 4 विशेषज्ञ तकनीकें

    बड़े माइक्रोसॉफ्ट एक्सेल डेटासेट के साथ काम करते समय, कभी-कभी हमें ड्रॉप-डाउन सूची बनाने और उसमें से डुप्लिकेट मान हटाने की आवश्यकता होती है। यह एक आसान कार्य है जो आपका बहुत समय और मेहनत बचाता है। आज इस लेख में हम चार त्वरित और उपयुक्त तरीके सीखेंगे जिनसे एक्सेल में ड्रॉप-डाउन सूची बनाकर डुप्लिकेट