2010-04-11 2 views

ответ

14

. NET 3.5 имеет HashSet.

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

+0

«... что так же, как кортежей», хотя и только 2-кортеж. – Thomas

+0

@ Томас Да, я хотел указать 2-кортеж. Отредактировано и исправлено. Благодарю. –

+0

keyvaluepair никогда не является кортежем. PLS редактировать его .. – nawfal

3

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

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

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

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

@mjv: C# - это более * статически * типизированный язык. Оба C# и Python строго типизированы. – quamrana

+0

@quamrana: совершенно верно. Это то, что я имел в виду; теперь отредактирован соответствующим образом. – mjv

+0

анонимные типы были добавлены в C# 3.0/.NET 3.5. .NET 3.0 был только BCL без изменений на языках –

1

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

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

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

Смежные вопросы