Есть ли в .Net структура данных "Set"?
В идеале я ищу шаблонный логический класс 9X_.cs-file Set. В нем будут все операции стандартного 9X_c#-language набора, такие как объединение, пересечение 9X_set и т. д., а также свертывание повторяющихся 9X_data-structure элементов.
В итоге я создал свой собственный 9X_c#.net класс set на основе C# Dictionary<>, просто 9X_csharp используя ключи.
- .NET 4 имеет интерфейс ISet вместе с двумя реализациями, HashSet и ...
Ответ #1
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
HashSet
, я думаю, самое близкое, что вы получите.
9X_c-sharp
- Мэтт, +1. Похоже, это именно то, о чем он просил. Похоже, это было добавлено спус ...
Ответ #2
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
Лучшая реализация набора, которую я видел, является 9X_c#-language частью замечательных коллекций Power Collection 9X_c-sharp от Wintellect: http://www.codeplex.com/PowerCollections.
Реализацию набора можно 9X_.cs-file найти здесь:
http://www.codeplex.com/PowerCollections/SourceControl/FileView.aspx?itemId=101886&changeSetId=6259
Он имеет все ожидаемые операции 9X_c#.net над множествами (объединение, пересечение 9X_csharp и т. д.).
Надеюсь, это поможет!
Ответ #3
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
Нет, в фреймворке его нет изначально. Существует 9X_c#-language реализация с открытым исходным кодом, которую 9X_set используют в большинстве проектов (например, nHibernate), которая 9X_c-sharp называется Iesi.Collections. Вот статья 9X_csharp CodeProject об этом:
Ответ #4
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
Вы проверяли HashSet в версии 3.5?
9X_c-sharp
Ответ #5
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
Я не думаю, что в C# есть что-то встроенное, но 9X_c# я знаю, что в сети есть несколько реализаций. Есть 9X_c#-language также несколько хороших статей на эту тему:
This is part 6 из 9X_csharp серии статей об эффективном представлении 9X_set структуры данных. Эта часть посвящена представлению 9X_.cs-file наборов в C#.
An implementation набора наборов
An implementation заданного 9X_.cs-file класса
Yet another implementation заданного класса
И наконец...
На самом 9X_c-sharp деле я использовал this library себя в качестве основы 9X_c# для реализации множества, которую я сделал 9X_sets год назад или около того.
Ответ #6
Ответ на вопрос: Есть ли в .Net структура данных "Set"?
Вот простая реализация:
public sealed class MathSet : HashSet, IEquatable>
{
public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode();
public bool Equals(MathSet obj) => SetEquals(obj);
public override bool Equals(object obj) => Equals(obj as MathSet);
public static bool operator ==(MathSet a, MathSet b) =>
ReferenceEquals(a, null) ? ReferenceEquals(b, null) : a.Equals(b);
public static bool operator !=(MathSet a, MathSet b) => !(a == b);
}
Пример использования:
var a = new MathSet { 1, 2, 3 };
var b = new MathSet { 3, 2, 1 };
var c = a.Equals(b); // true
var d = new MathSet> { a, b }; // contains one element
var e = a == b; // true
См. this question, чтобы 9X_c# узнать, почему этот подход был рассмотрен 9X_c# по сравнению с HashSet
.
-
5
-
15
-
6
-
4
-
8
-
3
-
12
-
6
-
8
-
3
-
2
-
4
-
4
-
4
-
1
-
3
-
6
-
2
-
6
-
4
-
2
-
4
-
3
-
3
-
2
-
6
-
5
-
1
-
3
-
2
-
1
-
4
-
2
-
7
-
6
-
4
-
2
-
2
-
8
-
16
-
13
-
13
-
14
-
11
-
5
-
17
-
26
-
13
-
2
-
16