Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 171
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Duplikate aus einer IEnumerable entfernen


Autor: Günther Foidl
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 4094
  
Kick it on dotnet-kicks.de  

Beschreibung:

Die beschriebenen Erweiterungsmethoden entfernen äußerst effizient Duplikate aus einer IEnumerable mit Hilfe eines neuen Features in .net 3.5 - dem HashSet.

PS: Für den Denkanstoß des Behaltens der Elementreihenfolge bedanke ich mich bei herbivore.


Abgelegt unter: IEnumerable, List, Duplikate, entfernen, HashSet, Duplikate entfernen, Dupletten, IComparer.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
namespace gfoidl.Extensions
{
	using System.Collections.Generic;
	using System.Linq;
	//-------------------------------------------------------------------------
	/// <summary>
	/// Erweiterungsmethoden für <see cref="IEnumerable&lt;T>"/>
	/// </summary>
	public static class MyIEnumerableExtensions
	{
		/// <summary>
		/// Entfernt Duplikate aus einem <see cref="IEnumerable&lt;T>"/>.
		/// </summary>
		/// <typeparam name="T">
		/// Der Typ der aufzulistenden Objekte.
		/// </typeparam>
		/// <param name="collection">
		/// Die Auflistung.
		/// </param>
		/// <returns>
		/// Auflistung ohne Duplikate.
		/// </returns>
		public static List<T> RemoveDuplicates<T>(this IEnumerable<T> collection)
		{
			return new HashSet<T>(collection).ToList();
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Entfernt Duplikate aus einem <see cref="IEnumerable&lt;T>"/>.
		/// </summary>
		/// <typeparam name="T">
		/// Der Typ der aufzulistenden Objekte.
		/// </typeparam>
		/// <param name="collection">
		/// Die Auflistung.
		/// </param>
		/// <param name="comparer">
		/// Die <see cref="IEqualityComparer&lt;T>"/>-Implementierung, die 
		/// zum Vergleichen von Schlüsseln verwendet werden soll, oder null, 
		/// wenn der Standard-<see cref="EqualityComparer&lt;T>"/> für diesen 
		/// Schlüsseltyp verwendet werden soll.
		/// </param>
		/// <returns>
		/// Auflistung ohne Duplikate.
		/// </returns>
		public static List<T> RemoveDuplicates<T>(
			this IEnumerable<T> collection,
			IEqualityComparer<T> comparer)
		{
			return new HashSet<T>(collection, comparer).ToList();
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Entfernt Duplikate aus einem <see cref="IEnumerable&lt;T>"/>. Die
		/// Reihenfolge der Elemente wird dabei beibehalten.
		/// </summary>
		/// <typeparam name="T">
		/// Der Typ der aufzulistenden Objekte.
		/// </typeparam>
		/// <param name="collection">
		/// Die Auflistung.
		/// </param>
		/// <returns>
		/// Auflistung ohne Duplikate.
		/// </returns>
		public static List<T> RemoveDuplicatesKeepOrder<T>(
			this IEnumerable<T> collection)
		{
			HashSet<T> hashSet = new HashSet<T>();
			List<T> result = new List<T>(collection.Count());

			foreach (T item in collection)
				if (hashSet.Add(item))
					result.Add(item);

			return result;
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Entfernt Duplikate aus einem <see cref="IEnumerable&lt;T>"/>. Die
		/// Reihenfolge der Elemente wird dabei beibehalten.
		/// </summary>
		/// <typeparam name="T">
		/// Der Typ der aufzulistenden Objekte.
		/// </typeparam>
		/// <param name="collection">
		/// Die Auflistung.
		/// </param>
		/// <param name="comparer">
		/// Die <see cref="IEqualityComparer&lt;T>"/>-Implementierung, die 
		/// zum Vergleichen von Schlüsseln verwendet werden soll, oder null, 
		/// wenn der Standard-<see cref="EqualityComparer&lt;T>"/> für diesen 
		/// Schlüsseltyp verwendet werden soll.
		/// </param>
		/// <returns>
		/// Auflistung ohne Duplikate.
		/// </returns>
		public static List<T> RemoveDuplicatesKeepOrder<T>(
			this IEnumerable<T> collection,
			IEqualityComparer<T> comparer)
		{
			HashSet<T> hashSet = new HashSet<T>(comparer);
			List<T> result = new List<T>(collection.Count());

			foreach (T item in collection)
				if (hashSet.Add(item))
					result.Add(item);

			return result;
		}
	}
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.