Как моделировать кортежи и наборы в C#?

Я хочу использовать некоторые функции Python как как Кортежи и Наборы в c#. я должен реализовать их? или там уже реализованы? мог кто-либо знать библиотеку динамических структур данных для языков .NET?

16
задан Kevin Crowell 11 April 2010 в 07:06
поделиться

3 ответа

.NET 3.5 имеет HashSet.

.NET 4.0 будет иметь класс Tuple. Как отмечалось в статье, в ранних версиях .NET есть KeyValuePair< TKey, TValue >, который похож на Tuple< T1, T2 >, с той лишь разницей, что KeyValuePair требует, чтобы TKey был уникальным.

14
ответ дан 30 November 2019 в 22:31
поделиться

Если вы работаете с . NET Framework раньше, чем уже упоминалось, Wintellect Power Collections может представлять некоторый интерес - в нем есть Pair и Triple для 2- и 3-кортежей, а также коллекции, такие как Set, Bag и Ordered.

Конечно, ничто не мешает вам самостоятельно реализовать Tuple в версии 4.0.

(Кстати, в подобных структурах данных нет ничего особенно "динамичного")

1
ответ дан 30 November 2019 в 22:31
поделиться

Для множеств хорошо подходят HashSets (функция .NET 3.5).

Частичный ответ, для кортежей:

  • .NET 4.0 обеспечивает [некоторую] поддержку кортежей.
  • Более ранние версии C# могут использовать анонимный тип (я думаю, он появился в .Net 2.0, 3.0 точно, со всеми этими LINQ штуками).

Ни один из этих подходов не является таким удобным, как в Python; основное препятствие возникает из-за того, что C# статически типизирован. Однако класс C# 4.0 Tuple имеет фабричные статические методы, которые упрощают создание кортежей (вплоть до 8-tuple, т.е. кортежей с 8 членами). Например, можно иметь

  var customer1 = Tuple.Create("John", "Smith", 14, 5.33, "202-123-444");

Использование анонимного типа может быть выполнено следующим образом. Основной недостаток этого подхода заключается в том, что необходимо явно именовать элементы "кортежа" (хотя это именование может быть неявно "спроецировано", если значения, используемые для инициализации, "спроецированы" из другого объекта.

  customer1 = new Customer {
                Name = "John",
                Surname = "Smith",
                NumberOfVisits = 14,
                CurrentBalance = 5.33,
                PhoneNr = "202-123-444"
  };
3
ответ дан 30 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: