Есть ли в .Net структура данных "Set"?

В идеале я ищу шаблонный логический класс 9X_.cs-file Set. В нем будут все операции стандартного 9X_c#-language набора, такие как объединение, пересечение 9X_set и т. д., а также свертывание повторяющихся 9X_data-structure элементов.

В итоге я создал свой собственный 9X_c#.net класс set на основе C# Dictionary<>, просто 9X_csharp используя ключи.

57
1

  • .NET 4 имеет интерфейс ISet вместе с двумя реализациями, HashSet и ...
6
Общее количество ответов: 6

Ответ #1

Ответ на вопрос: Есть ли в .Net структура данных "Set"?

HashSet, я думаю, самое близкое, что вы получите.

9X_c-sharp

50
1

  • Мэтт, +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 и т. д.).

Надеюсь, это поможет!

15
0

Ответ #3

Ответ на вопрос: Есть ли в .Net структура данных "Set"?

Нет, в фреймворке его нет изначально. Существует 9X_c#-language реализация с открытым исходным кодом, которую 9X_set используют в большинстве проектов (например, nHibernate), которая 9X_c-sharp называется Iesi.Collections. Вот статья 9X_csharp CodeProject об этом:

http://www.codeproject.com/KB/recipes/sets.aspx

10
0

Ответ #4

Ответ на вопрос: Есть ли в .Net структура данных "Set"?

Вы проверяли HashSet в версии 3.5?

9X_c-sharp

10
0

Ответ #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
0

Ответ #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.

1
0