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

Я хочу использовать некоторые функции python, такие как Tuples и Sets в С#. должен ли я их реализовать? или уже реализованы? может ли кто-нибудь узнать библиотеку динамических структур данных для языков .net?

Ответы

Ответ 1

.NET 3.5 имеет HashSet.

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

Ответ 2

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

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

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

Ни один из этих подходов не будет таким же удобным, как у Python; основной недостаток связан с тем, что С# статически типизирован. Однако класс С# 4.0 Tuple имеет factory -подобные статические методы, которые упрощают создание кортежей (до 8 кортежей, т.е. Кортежи с 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

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

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

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