Я хочу использовать некоторые функции Python как как Кортежи и Наборы в c#. я должен реализовать их? или там уже реализованы? мог кто-либо знать библиотеку динамических структур данных для языков .NET?
.NET 3.5 имеет HashSet.
.NET 4.0 будет иметь класс Tuple. Как отмечалось в статье, в ранних версиях .NET есть KeyValuePair< TKey, TValue >, который похож на Tuple< T1, T2 >, с той лишь разницей, что KeyValuePair требует, чтобы TKey был уникальным.
Если вы работаете с . NET Framework раньше, чем уже упоминалось, Wintellect Power Collections может представлять некоторый интерес - в нем есть Pair
и Triple
для 2- и 3-кортежей, а также коллекции, такие как Set
, Bag
и Ordered
.
Конечно, ничто не мешает вам самостоятельно реализовать Tuple
в версии 4.0.
(Кстати, в подобных структурах данных нет ничего особенно "динамичного")
Для множеств хорошо подходят HashSets (функция .NET 3.5).
Частичный ответ, для кортежей:
Ни один из этих подходов не является таким удобным, как в 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" };