Меня интересует: что такое аналог C # std::pair
в C ++? Я нашел System.Web.UI.Pair
класс, но я бы предпочел что-то на основе шаблонов.
Спасибо!
c#
.net
data-structures
std-pair
base-class-library
Александр Прокофьев
источник
источник
Ответы:
Кортежи доступны начиная с .NET4.0 и поддерживают обобщенные формы :
В предыдущих версиях вы можете использовать
System.Collections.Generic.KeyValuePair<K, V>
или решение, подобное следующему:И используйте это так:
Это выводит:
Или даже это прикованные пары:
Что выводит:
источник
Tuple
. Поэтому вы можете сказать,Tuple.Create("Hello", 4)
что немного проще, чемnew Tuple<string, int>("Hello", 4)
. (Кстати, .NET4.0 уже здесь с 2010 года.)Tuple<>
реализует твердуюEquals
иGetHashCode
с семантикой значения, что здорово. Имейте в виду при реализации ваших собственных кортежей.System.Web.UI
содержитPair
класс, потому что он интенсивно использовался в ASP.NET 1.1 как внутренняя структура ViewState.Обновление августа 2017: C # 7.0 / .NET Framework 4.7 предоставляет синтаксис для объявления кортежа с именованными элементами с использованием
System.ValueTuple
структуры.см. MSDN для большего количества примеров синтаксиса.
Обновление июнь 2012:
Tuples
был частью .NET с версии 4.0.Вот более ранняя статья, описывающая включение в .NET4.0 и поддержку обобщений:
источник
tuple.Item1 = 4;
К сожалению, нет. Вы можете использовать
System.Collections.Generic.KeyValuePair<K, V>
во многих ситуациях.Кроме того, вы можете использовать анонимные типы для обработки кортежей, по крайней мере локально:
Последняя альтернатива - создать собственный класс.
источник
C # имеет кортежи начиная с версии 4.0.
источник
Некоторые ответы кажутся просто неправильными,
Вот мой класс пары
Вот некоторый тестовый код:
источник
Если речь идет о словарях и т. П., Вы ищете System.Collections.Generic.KeyValuePair <TKey, TValue>.
источник
В зависимости от того, чего вы хотите достичь, вы можете попробовать KeyValuePair .
Тот факт, что вы не можете изменить ключ записи, можно, конечно, исправить, просто заменив всю запись новым экземпляром KeyValuePair.
источник
Я создал реализацию Tuples на C #, которая решает проблему в общем случае для двух-пяти значений - вот пост в блоге , который содержит ссылку на источник.
источник
Я задал тот же вопрос только сейчас, после быстрого поиска в Google, и обнаружил, что в .NET есть класс пар, кроме его в System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) боже мой, почему они поместили его туда, а не структуру коллекций
источник
Начиная с .NET 4.0 у вас есть
System.Tuple<T1, T2>
класс:источник
Я обычно расширяю
Tuple
класс в свою собственную обертку следующим образом:и используйте это так:
источник
Для того, чтобы заставить выше работать (мне нужна была пара в качестве ключа словаря). Я должен был добавить:
и как только я это сделал, я также добавил
подавить предупреждение компилятора.
источник
Библиотека PowerCollections (ранее доступная в Wintellect, но теперь размещенная на Codeplex @ http://powercollections.codeplex.com ) имеет общую структуру Pair.
источник
Помимо пользовательского класса или .Net 4.0 Tuples, начиная с C # 7.0, существует новая функция под названием ValueTuple, которая является структурой, которая может использоваться в этом случае. Вместо того чтобы писать:
и доступ к значениям через
t.Item1
иt.Item2
, вы можете просто сделать это так:или даже:
источник