Что такое кортеж в программировании
Перейти к содержимому

Что такое кортеж в программировании

  • автор:

Кортежи

Кортежи (tuple) в Python – это те же списки за одним исключением. Кортежи неизменяемые структуры данных. Так же как списки они могут состоять из элементов разных типов, перечисленных через запятую. Кортежи заключаются в круглые, а не квадратные скобки.

>>> a = (10, 2.13, "square", 89, 'C') >>> a (10, 2.13, 'square', 89, 'C')

Из кортежа можно извлекать элементы и брать срезы:

>>> a[3] 89 >>> a[1:3] (2.13, 'square')

Однако изменять его элементы нельзя:

>>> a[0] = 11 Traceback (most recent call last): File "", line 1, in TypeError: 'tuple' object does not support item assignment

Также у типа tuple нет методов для добавления и удаления элементов.

Возникает резонный вопрос. Зачем в язык программирования был введен этот тип данных, по-сути представляющий собой неизменяемый список? Дело в том, что иногда надо защитить список от изменений. Преобразовать же кортеж в список, если это потребуется, как и выполнить обратную операцию легко с помощью встроенных в Python функций list() и tuple() :

>>> a = (10, 2.13, "square", 89, 'C') >>> b = [1, 2, 3] >>> c = list(a) >>> d = tuple(b) >>> c [10, 2.13, 'square', 89, 'C'] >>> d (1, 2, 3)

Рассмотрим случай, когда уместно использовать кортежи. В Python изменяемые объекты передаются в функцию по ссылке. Это значит, что не создается копия объекта, а переменной-параметру присваивается ссылка на уже существующий объект. В итоге, если в теле функции объект изменяется, то эти изменения касаются глобального объекта.

def add_num(seq, num): for i in range(len(seq)): seq[i] += num return seq origin = [3, 6, 2, 6] changed = add_num(origin, 3) print(origin) print(changed)

Данная программа неправильная. Хотя никаких выбросов исключений не произойдет, она содержит логическую ошибку. На выводе получаем:

[6, 9, 5, 9] [6, 9, 5, 9]

То есть исходный список был также изменен. Параметр seq содержал ссылку не на свой локальный список, а на список-оригинал. Таким образом, в операторе return здесь нет смыла. Если функция замысливалась как изменяющая глобальный список, то программа должна выглядеть так:

def add_num(seq, num): for i in range(len(seq)): seq[i] += num origin = [3, 6, 2, 6] add_num(origin, 3) print(origin)

Что делать, если все же требуется не изменять исходный список, а сформировать по нему новый. Задачу можно решить несколькими способами. Во первых, в функции можно создать локальный список, после чего возвращать его:

def add_num(seq, num): new_seq = [] for i in seq: new_seq.append(i + num) return new_seq origin = [3, 6, 2, 6] changed = add_num(origin, 3) print(origin) print(changed)
[3, 6, 2, 6] [6, 9, 5, 9]

Исходный список в функции не меняется. Его элементы лишь перебираются.

Второй способ защитить список-оригинал – использовать кортеж. Этот способ более надежный, так как в больших программах трудно отследить, что ни одна функция не содержит команд изменения глобальных данных.

Хотя преобразовывать к кортежу можно как при передаче в функцию, так и в самой функции, лучше сразу делать глобальный список кортежем. Поскольку неизменяемые объекты передаются по значению, а не по ссылке, то в функцию будет поступать копия структуры, а не оригинал. Даже если туда передается оригинал, изменить его невозможно. Можно лишь, как вариант, скопировать его и/или изменить тип, создав тем самым локальную структуру, и делать с ней все, что заблагорассудится.

def add_num(seq, num): seq = list(seq) for i in range(len(seq)): seq[i] += num return seq origin = (3, 6, 2, 6) changed = add_num(origin, 3) print(origin) print(changed)

Списки в кортежах

Кортежи могут содержать списки, также как списки быть вложенными в другие списки.

>>> nested = (1, "do", ["param", 10, 20])

Как вы думаете, можем ли мы изменить список [«param», 10, 20] вложенный в кортеж nested ? Список изменяем, кортеж – нет. Если вам кажется, что нельзя, то вам кажется неправильно. На самом деле можно:

>>> nested[2][1] = 15 >>> nested (1, 'do', ['param', 15, 20])

Примечание. Выражения типа nested[2][1] используются для обращения к вложенным объектам. Первый индекс указывает на позицию вложенного объекта, второй – индекс элемента внутри вложенного объекта. Так в данном случае сам список внутри кортежа имеет индекс 2, а элемент списка 10 – индекс 1 в списке.

Странная ситуация. Кортеж неизменяем, но мы все-таки можем изменить его. На самом деле кортеж остается неизменяемым. Просто в нем содержится не сам список, а ссылка на него. Ее изменить нельзя. Но менять сам список можно.

Чтобы было проще понять, перепишем кортеж так:

>>> l = ["param", 10, 20] >>> t = (1, "do", l) >>> t (1, 'do', ['param', 10, 20])

Кортеж содержит переменную-ссылку. Поменять ее на другую ссылку нельзя. Но кортеж не содержит самого списка. Поэтому его можно менять как угодно:

>>> l.pop(0) 'param' >>> t (1, 'do', [10, 20])

Однако такой номер не проходит с неизменяемыми типами:

>>> a = "Kat" >>> t = (a, l) >>> t ('Kat', [10, 20]) >>> a = "Bat" >>> t ('Kat', [10, 20])

Они передаются в кортеж как и в функцию – по значению. То есть их значение копируется в момент передачи.

Практическая работа

  1. Чтобы избежать изменения исходного списка, не обязательно использовать кортеж. Можно создать его копию с помощью метода списка copy() или взять срез от начала до конца [:] . Скопируйте список первым и вторым способом и убедитесь, что изменение копий никак не отражается на оригинале.
  2. Заполните один кортеж десятью случайными целыми числами от 0 до 5 включительно. Также заполните второй кортеж числами от -5 до 0. Для заполнения кортежей числами напишите одну функцию. Объедините два кортежа с помощью оператора +, создав тем самым третий кортеж. С помощью метода кортежа count() определите в нем количество нулей. Выведите на экран третий кортеж и количество нулей в нем.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Кортеж

В математике корте́ж или n-ка (упорядоченная n-ка) — упорядоченный конечный набор длины n(где n— любое натуральное число либо 0), каждый из элементов которого x_iпринадлежит некоторому множеству X_i, 1\leqslant i \leqslant n. Элементы кортежа могут повторяться в нём любое число раз (этим, в частности, он отличается от упорядоченного множества, куда каждый элемент может входить только в одном экземпляре).

В математике кортеж обычно записывается перечислением элементов в круглых или угловых скобках.

В теории множеств кортеж обычно определяется индуктивно:

  • пустое множество — это кортеж (с нулевым количеством элементов);
  • для каждого кортежа (a_1, \ldots, a_n)=T, множество (a, a_1, \ldots, a_n)=\<a, \<a, T\>\>» width=»» height=»» /> также является кортежем.</li>
</ul>
<p>Элементы кортежа называются его компонентами, или координатами.</p>
<p>Кортеж длины нуль называется пустым.</p><div class='code-block code-block-6' style='margin: 8px 0; clear: both;'>
<!-- 6eurosoft -->
<script src=

Частными случаями кортежа является (по числу элементов) упорядоченная пара, тройка, четвёрка.

Многие математические объекты формально определяются как кортежи. Например, Ориентированный граф определяется как кортеж (V,E), где V — это набор вершин, а E — подмножество V × V, обозначающее рёбра. Точка в n-мерном пространстве действительных чисел определяется как кортеж длины n, составленный из элементов множества действительных чисел.

В программировании

В некоторых языках программирования, например, Python или Lisp, кортеж — особый тип структуры данных. В языке C++ поддержка кортежей реализована как шаблон класса std::tuple [источник?] . В языке Python кортеж (англ. tuple ) отличается от списка тем, что элементы кортежа нельзя изменять.

thing = "rose" colour = "red" print "%s is %s" % (thing, colour) 

Эта программа на Python, использующая кортеж (thing, colour) , выведет: rose is red

В императивных языках множество аргументов подпрограммы описывается и передаётся кортежем.

Кортеж является стандартным типом в платформе .NET начиная с версии 4.0 [1]

В базах данных

В базах данных кортежем называется группа взаимосвязанных элементов данных. В реляционных базах данных кортеж — это элемент отношения, строка таблицы; упорядоченный набор из N элементов.

Примечания

Ссылки

Кортежи

Кортеж — это тип данных, являющийся аналогом записи или класса. Как запись или класс, кортеж представляет собой набор элементов разных типов, но описывается существенно проще. Кроме того, поля кортежа имеют предопределенные имена и являются неизменными: поменять поля кортежа после его создания невозможно.

Тип кортежа

Для типа кортежа используется следующая запись:

var t: (string,integer);

Данная запись похожа на объявление перечислимого типа. Если в круглых скобках — новые имена, то это перечислимый тип, а если имена типов, то это — тип кортежа.

Кортежи представляются типом System.Tuple платформы .NET:

var t: System.Tuple;

Однако данное представление может поменяться в будущем.

Конструирование значений типа кортеж

Значения типа кортеж могут быть сконструированы в виде заключенного в круглые скобки перечисления составляющих кортеж значений через запятую. Например:

t := (‘Иванов’,23);

Для построенных таким образом значений работает автовыведение типа:

var t1 := (‘Иванов’,(5,3,4)); // кортеж, вторым элементом которого является кортеж

Вывод кортежей

Как и при выводе записей, при выводе кортежей значения их элементов заключаются в круглые скобки и перечисляются через запятую:

writeln(t); // (Иванов,23)
writeln(t1); // (Иванов,(5,3,4))

Доступ к элементам кортежа

Элементы (поля) кортежа имеют имена Item1, Item2 и т.д.:

Print(t.Item1,t.Item2);

К элементам кортежа можно обращаться также по индексу:

Индексы должны быть константными выражениями.

После создания кортеж неизменен: его поля нельзя менять:

t[1] := 20; // ошибка

Кортежное присваивание (распаковка кортежа в переменные)

Значения типа кортеж можно распаковать в переменные соответствующих типов, используя кортежное присваивание:

var t := (‘Иванов’,23);
var name: string;
var age: integer;
(name,age) := t;

Последнее присваивание, где в левой части оператора присваивания используется заключенное в круглые скобки перечисление переменных, называется кортежным. Кортежное присваивание компилятор заменяет на несколько подряд идущих одиночных присваиваний:

name := t[0];
age := t[1];

С использованием кортежного присваивания меняется стиль программирования. Например, чтобы поменять местами значения двух переменных a и b, достаточно написать следующее кортежное присваивание:

В кортежном присваивании справа допускается количество элементов большее, чем количество переменных слева:

Кортежное присваивание можно совмещать с описанием переменных:

(var a, var b) := (1,2);

var (a,b) := (1,2);

Использование кортежей в функциях

Кортежи позволяют упаковывать несколько значений в одно. Это оказывается удобным если надо передавать несколько взаимосвязанных значений в качестве параметра или возвращать из функции несколько значений.

Например, функция, вычисляющая площадь и периметр прямоугольника, может быть записана в виде:

function SP(a,b: real) := (a*b,2*(a+b));

Чтобы воспользоваться результатом такой функции, удобно использовать распаковку кортежа в переменные с описанием:

Кортежи (Visual Basic)

Начиная с Visual Basic 2017 язык Visual Basic предлагает встроенную поддержку кортежей, что упрощает создание кортежей и доступ к элементам кортежей. Кортеж — это упрощенная структура данных, которая имеет определенное количество и последовательность значений. При создании экземпляра кортежа определяется число и тип данных каждого значения (или элемента). Например, 2 кортежа (или пара) имеет два элемента. Первый может быть значением Boolean , а второй — . String Так как кортежи упрощают хранение нескольких значений в одном объекте, они часто используются в качестве упрощенного способа возврата нескольких значений из метода.

Для поддержки кортежа требуется ValueTuple тип . Если платформа .NET Framework 4.7 не установлен, необходимо добавить пакет System.ValueTuple NuGet , который доступен в коллекции NuGet. Без этого пакета может возникнуть ошибка компиляции, похожая на «Предопределенный тип «ValueTuple(Of. )» не определен или импортирован».

Создание экземпляра и использование кортежа

Чтобы создать экземпляр кортежа, заключив его значения с разделителями-запятыми в круглые скобки. Каждое из этих значений затем становится полем кортежа. Например, следующий код определяет тройной (или 3 кортеж) с Date в качестве первого значения, a String в качестве второго и в Boolean качестве третьего.

Dim holiday = (#07/04/2017#, "Independence Day", True) 

По умолчанию имя каждого поля в кортеже состоит из строки Item и одноуровневой позиции поля в кортеже. Для этого 3 кортежа Date поле имеет значение Item1 , String поле — Item2 , а Boolean поле — Item3 . В следующем примере отображаются значения полей кортежа, экземпляр которого был создан в предыдущей строке кода.

Console.WriteLine($" is " + $"") ' Output: 7/4/2017 12:00:00 AM Is Independence Day, a national holiday 

Поля кортежа Visual Basic доступны для чтения и записи; После создания экземпляра кортежа можно изменить его значения. В следующем примере изменяются два из трех полей кортежа, созданного в предыдущем примере, и отображается результат.

holiday.Item1 = #01/01/2018# holiday.Item2 = "New Year's Day" Console.WriteLine($" is " + $"") ' Output: 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday 

Создание экземпляра и использование именованного кортежа

Вместо использования имен по умолчанию для полей кортежа можно создать экземпляр именованного кортежа , назначив элементы кортежа собственные имена. Затем к полям кортежа можно получить доступ по назначенным именам или по именам по умолчанию. В следующем примере создается тот же 3-кортеж, что и ранее, за исключением того, что он явно присваивает имена первому полю EventDate , второму Name и третьему IsHoliday . Затем он отображает значения полей, изменяет их и снова отображает значения полей.

Dim holiday = (EventDate:=#07/04/2017#, Name:="Independence Day", IsHoliday:=True) Console.WriteLine($" Is " + $"") holiday.Item1 = #01/01/2018# holiday.Item2 = "New Year's Day" Console.WriteLine($" is " + $"") ' The example displays the following output: ' 7/4/2017 12:00:00 AM Is Independence Day, a national holiday ' 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday 

Имена кортежей также можно указать в объявлении типа переменной, поля или параметра:

Dim holiday As (EventDate As Date, Name As String, IsHoliday As Boolean) = (#07/04/2017#, "Independence Day", True) Console.WriteLine(holiday.Name) ' Output: Independence Day 

Это особенно полезно при предоставлении кортежей инициализатору коллекции; Имена кортежей можно указать как часть объявления типа коллекции:

Dim events As New List(Of (EventDate As Date, Name As String, IsHoliday As Boolean)) From < (#07/04/2017#, "Independence Day", True), (#04/22/2017#, "Earth Day", False) >Console.WriteLine(events(1).IsHoliday) ' Output: False 

Выводимые имена элементов кортежа

Начиная с Visual Basic 15.3, Visual Basic может выводить имена элементов кортежа; вам не нужно назначать их явным образом. Выводимые имена кортежей полезны при инициализации кортежа из набора переменных, и требуется, чтобы имя элемента кортежа совпадало с именем переменной.

В следующем примере создается кортеж stateInfo , содержащий три явно именованных элемента: state , stateName и capital . Обратите внимание, что при именовании элементов инструкция инициализации кортежа просто присваивает именованным элементам значения переменных с идентичными именами.

Const state As String = "MI" Const stateName As String = "Michigan" Const capital As String = "Lansing" Dim stateInfo = (state:=state, stateName:=stateName, capital:=capital) Console.WriteLine($": 2-letter code: , Capital ") ' The example displays the following output: ' Michigan: 2-letter code: MI, Capital Lansing 

Поскольку элементы и переменные имеют одинаковые имена, компилятор Visual Basic может выводить имена полей, как показано в следующем примере.

Const state As String = "MI" Const stateName As String = "Michigan" Const capital As String = "Lansing" Dim stateInfo = (state, stateName, capital) Console.WriteLine($": 2-letter code: , Capital ") ' The example displays the following output: ' Michigan: 2-letter code: MI, Capital Lansing 

Чтобы включить выводимые имена элементов кортежа, необходимо определить версию компилятора Visual Basic, которая будет использоваться в файле проекта Visual Basic (*.vbproj):

Номер версии может быть любой версии компилятора Visual Basic, начиная с версии 15.3. Вместо жесткого программирования конкретной версии компилятора можно также указать «Latest» в качестве значения для компиляции LangVersion с самой последней версией компилятора Visual Basic, установленной в вашей системе.

В некоторых случаях компилятор Visual Basic не может определить имя элемента кортежа из имени кандидата, а на поле кортежа можно ссылаться только с помощью имени по умолчанию, например Item1 , Item2 и т. д. К ним относятся:

  • Имя кандидата совпадает с именем элемента кортежа, например Item3 , Rest или ToString .
  • Имя кандидата дублируется в кортеже.

Если вывод имени поля завершается сбоем, Visual Basic не создает ошибку компилятора и не создает исключение во время выполнения. Вместо этого на поля кортежей необходимо ссылаться по предопределенным именам, таким как Item1 и Item2 .

Кортежи и структуры

  • Пользовательские члены. Вы не можете определить собственные свойства, методы или события кортежа.
  • Проверка. Невозможно проверить данные, назначенные полям.
  • Неизменяемость. Кортежи Visual Basic могут изменяться. В отличие от этого, пользовательская структура позволяет управлять тем, является ли экземпляр изменяемым или неизменяемым.

Если важны настраиваемые члены, проверка свойств и полей или неизменяемость, следует использовать инструкцию Структуры Visual Basic для определения настраиваемого типа значения.

Кортеж Visual Basic наследует члены своего типа ValueTuple . Помимо полей, к ним относятся следующие методы:

Метод Описание
CompareTo Сравнивает текущий кортеж с другим кортежем с таким же количеством элементов.
Равно Определяет, равен ли текущий кортеж другому кортежу или объекту.
GetHashCode Вычисляет хэш-код для текущего экземпляра.
ToString Возвращает строковое представление этого кортежа, которое принимает форму (Item1, Item2. ) , где Item1 и Item2 представляют значения полей кортежа.

Кроме того, типы ValueTuple реализуют IStructuralComparable интерфейсы и IStructuralEquatable , которые позволяют определять пользовательские компараторы.

Назначение и кортежи

Visual Basic поддерживает назначение между типами кортежей с одинаковым количеством полей. Типы полей можно преобразовать, если выполняется одно из следующих значений:

  • Исходное и целевое поля имеют один и тот же тип.
  • Определяется расширяющее (или неявное) преобразование исходного типа в целевой тип.
  • Option Strict имеет значение On , и определяется сужающее (или явное) преобразование исходного типа в целевой тип. Это преобразование может вызвать исключение, если исходное значение находится за пределами диапазона целевого типа.

Другие преобразования в контексте назначений не учитываются. Рассмотрим возможные виды назначений между типами кортежей.

В приведенных ниже примерах можно использовать указанные переменные:

' The number and field types of all these tuples are compatible. ' The only difference Is the field names being used. Dim unnamed = (42, "The meaning of life") Dim anonymous = (16, "a perfect square") Dim named = (Answer:=42, Message:="The meaning of life") Dim differentNamed = (SecretConstant:=42, Label:="The meaning of life") 

Первые две переменные, unnamed и anonymous , не имеют семантических имен, предоставленных для полей. Имена полей по умолчанию Item1 и Item2 . Последние две переменные и named differentName имеют имена семантических полей. Обратите внимание на то, что поля в этих двух кортежах называются по-разному.

Все четыре кортежа имеют одинаковое количество полей (называемых arity), и типы этих полей идентичны. Таким образом, все эти назначения работают:

' Assign named to unnamed. named = unnamed ' Despite the assignment, named still has fields that can be referred to as 'answer' and 'message'. Console.WriteLine($", ") ' Output: 42, The meaning of life ' Assign unnamed to anonymous. anonymous = unnamed ' Because of the assignment, the value of the elements of anonymous changed. Console.WriteLine($", ") ' Output: 42, The meaning of life ' Assign one named tuple to the other. named = differentNamed ' The field names are Not assigned. 'named' still has 'answer' and 'message' fields. Console.WriteLine($", ") ' Output: 42, The meaning of life 

Обратите внимание на то, что имена кортежей не назначаются. Значения полей назначаются в соответствии с порядком полей в кортеже.

Наконец, обратите внимание, что кортеж named можно назначить кортежу conversion , даже если первым полем named Integer является , а первым полем conversion Long является . Это назначение выполняется успешно, так как преобразование в Integer Long является расширяющим преобразованием.

' Assign an (Integer, String) tuple to a (Long, String) tuple (using implicit conversion). Dim conversion As (Long, String) = named Console.WriteLine($" (), " + $" ()") ' Output: 42 (Int64), The meaning of life (String) 

Кортежи с разным количеством полей не назначаются:

' Does not compile. ' VB30311: Value of type '(Integer, Integer, Integer)' cannot be converted ' to '(Answer As Integer, Message As String)' var differentShape = (1, 2, 3) named = differentShape 

Кортежи как возвращаемые значения методов

Метод может возвращать только одно значение. Однако часто требуется, чтобы вызов метода возвращал несколько значений. Это ограничение можно обойти несколькими способами.

  • Можно создать пользовательский класс или структуру, свойства или поля которых представляют значения, возвращаемые методом . Это тяжелое решение; Для этого требуется определить пользовательский тип, единственной целью которого является получение значений из вызова метода.
  • Из метода можно вернуть одно значение, а остальные значения можно передать путем их передачи по ссылке в метод . Это связано с затратами на создание экземпляра переменной и рискует случайной перезаписью значения переменной, передаваемой по ссылке.
  • Вы можете использовать кортеж, который предоставляет упрощенное решение для получения нескольких возвращаемых значений.

Например, методы TryParse в .NET возвращают Boolean значение, указывающее, успешно ли выполнена операция синтаксического анализа. Результат операции синтаксического анализа возвращается в переменной, передаваемой по ссылке в метод . Как правило, вызов метода синтаксического анализа, например, Int32.TryParse выглядит следующим образом:

Dim numericString As String = "123456" Dim number As Integer Dim result = Integer.TryParse(numericString, number) Console.WriteLine($"", "Failure")>") ' Output: Success: 123,456 

Мы можем вернуть кортеж из операции синтаксического анализа, если заключим вызов Int32.TryParse метода в наш собственный метод. В следующем примере NumericLibrary.ParseInteger вызывает метод и возвращает именованный кортеж Int32.TryParse с двумя элементами.

Imports System.Globalization Public Module NumericLibrary Public Function ParseInteger(value As String) As (Success As Boolean, Number As Integer) Dim number As Integer Return (Integer.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, number), number) End Function End Module 

Затем можно вызвать метод с помощью следующего кода:

Dim numericString As String = "123,456" Dim result = ParseInteger(numericString) Console.WriteLine($"", "Failure")>") Console.ReadLine() ' Output: Success: 123,456 

Кортежи и кортежи Visual Basic в платформа .NET Framework

Кортеж Visual Basic — это экземпляр одного из универсальных типов System.ValueTuple, появившихся в платформа .NET Framework 4.7. Платформа .NET Framework также включает набор универсальных классов System.Tuple. Однако эти классы отличаются от кортежей Visual Basic и универсальных типов System.ValueTuple несколькими способами:

  • Элементы классов кортежей — это свойства с именами Item1 , Item2 и т. д. В кортежах Visual Basic и типах ValueTuple элементы кортежа являются полями.
  • Нельзя назначать значимые имена элементам экземпляра кортежа или экземпляра ValueTuple . Visual Basic позволяет назначать имена, которые передают значение полей.
  • Свойства экземпляра кортежа доступны только для чтения; кортежи неизменяемы. В кортежах Visual Basic и типах ValueTuple поля кортежей доступны для чтения и записи; кортежи являются изменяемыми.
  • Универсальные типы кортежей являются ссылочными типами. Использование этих типов кортежей означает выделение объектов. В критических путях это может заметно влиять на производительность приложения. Кортежи Visual Basic и типы ValueTuple являются типами значений.

Методы расширения в TupleExtensions классе упрощают преобразование кортежей Visual Basic и объектов кортежей .NET. Метод ToTuple преобразует кортеж Visual Basic в объект Кортежа .NET, а метод ToValueTuple преобразует объект .NET Tuple в кортеж Visual Basic.

В следующем примере создается кортеж, он преобразуется в объект кортежа .NET и преобразуется обратно в кортеж Visual Basic. Затем в примере сравнивается этот кортеж с исходным, чтобы убедиться, что они равны.

Dim cityInfo = (name:="New York", area:=468.5, population:=8_550_405) Console.WriteLine($", type ") ' Convert the Visual Basic tuple to a .NET tuple. Dim cityInfoT = TupleExtensions.ToTuple(cityInfo) Console.WriteLine($", type ") ' Convert the .NET tuple back to a Visual Basic tuple and ensure they are the same. Dim cityInfo2 = TupleExtensions.ToValueTuple(cityInfoT) Console.WriteLine($", type ") Console.WriteLine($" = : ") ' The example displays the following output: ' (New York, 468.5, 8550405), type ValueTuple`3 ' (New York, 468.5, 8550405), type Tuple`3 ' (New York, 468.5, 8550405), type ValueTuple`3 ' cityInfo = cityInfo2 : True 

См. также

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *