Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65

Tuples - что за зверь такой?

10.02.2021, 21:25. Показов 3061. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно наткнулся на такую структуру данных как кортеж (если правильно перевел)

PowerShell
1
[tuple]::Create("a", "a", "c", "d", "f")
Code
1
2
3
4
5
6
Item1  : a
Item2  : a
Item3  : c
Item4  : d
Item5  : f
Length : 5
Ни хеш таблица, ни массив, ни список может кто прояснить что за зверь такой?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2021, 21:25
Ответы с готовыми решениями:

Что за зверь такой?
Что за зверь такой? Выдрал на днях из старой материнки AT49F002NT почитал про него, понял что в него биос загружают и имеет он 2мб флэш. В...

АА дерево, что за зверь такой?
Очень мало информации по этой структуре данных. Нужно написать реализацию, а я не знаю что от меня именно хотят. Прочитал статью на...

Что за зверь такой TPrnRep ???
Кто-нибудь знает, что это за зверь такой - объект TPrnRep в VFP 6.0 и как с ним обращаться. А то в проге он используется, а документации...

17
 Аватар для volodin661
6794 / 2291 / 348
Регистрация: 10.12.2013
Сообщений: 7,912
10.02.2021, 23:44
для C# может и сгодится, а для Powershell практического применения не придумывается.

Добавлено через 50 минут
Но.
Но...
Но если распарсить оч.большой CSV-файл с количеством полей не более 7 в соответствующий октупель ( тупель с семью полями; восьмое поле в нём служит целям расширения ), то, скорее всего, будет значительный прирост производительности при сортировке, а также возможны простые операции сравнения туплей, поскольку тупель имеет на борту явную имплементацию интерфейса IComparer.

Добавлено через 3 минуты
доступ к полям, правда, будет выглядеть диковато ( $тупель.Item1, $тупель.item3 итд )
0
 Аватар для volodin661
6794 / 2291 / 348
Регистрация: 10.12.2013
Сообщений: 7,912
16.02.2021, 18:41
Цитата Сообщение от volodin661 Посмотреть сообщение
доступ к полям, правда, будет выглядеть диковато ( $тупель.Item1, $тупель.item3 итд )
НО!
В powershell, начиная с 6-ой версии, добавлен индексный доступ к тупельным полям:

PowerShell
1
2
3
4
$тупель = [Tuple]::Create(1, 'эне', 'бене','раба', 'квинтер','финтер','жаба')
$тупель | ft
$тупель[1]
$тупель[-1]
output

XML
1
2
3
4
5
Item1 Item2 Item3 Item4 Item5   Item6  Item7 Length
----- ----- ----- ----- -----   -----  ----- ------
    1 эне   бене  раба  квинтер финтер жаба       7
эне
жаба
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
16.02.2021, 20:26  [ТС]
Это я читал, я только вот убейте не пойму какие преимущества у этого тупиля и другими структурами данных. Понятно что в этом тупили можно соединить данные разных типов. Ну по-моему теперь это уже не совсем актуально.

Добавлено через 4 минуты
Как бы однозначно сформулировать вопрос? В чём фишка туплей?
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
17.02.2021, 14:17
PowerShell
1
2
3
4
$nums = 1..10
,$nums|%% @{n=3}|%{
    [Tuple]::Create($_[0], $_[1], $_[2])
}
Цитата Сообщение от alhaos Посмотреть сообщение
В чём фишка туплей?
Их удобно использовать, например, для параметров функции
  • можем заранее знать типы данных
  • можем заранее знать количество элементов
  • можем заранее знать имена элементов
PowerShell
1
2
3
4
5
6
7
function foo{
    param([Tuple[Int, String]]$t)
 
    $t.Item1  # Заранее знаем: имя - Item1 ; тип - Int
    $t.Item2  # Заранее знаем: имя - Item2 ; тип - String
    $t.Length # Заранее знаем: размер -  2 
}
1
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 701
17.02.2021, 15:16
Тоже не вижу в чем прикол. Все это можно легче сделать, используя другие типы.

В powershell, в отличии от C#, нельзя дать произвольные имена элементам, только Item(1..8), тогда хоть какая-то облегченная структура.

Неудобно доставать из Rest'a:
PowerShell
1
2
3
4
$a = [tuple]::Create(1,2,3,4,5,6,7,[tuple]::Create(8,9,10))
$a.Item1             # 1
$a.Rest.Item1.Item2  # 9
$a[7][1]             # 9
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
17.02.2021, 15:34  [ТС]
Цитата Сообщение от lesser Посмотреть сообщение
Тоже не вижу в чем прикол
вот и я не увидел, какого то весомого аргумента.

Добавлено через 51 секунду
Цитата Сообщение от Fors1k Посмотреть сообщение
Их удобно использовать, например, для параметров функции
опять же пропадают плюшки валидации например.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
17.02.2021, 17:31
Цитата Сообщение от alhaos Посмотреть сообщение
опять же пропадают плюшки валидации например.
Что ты имеешь в виду? Покажи пример.
0
 Аватар для volodin661
6794 / 2291 / 348
Регистрация: 10.12.2013
Сообщений: 7,912
17.02.2021, 17:53
Лучший ответ Сообщение было отмечено alhaos как решение

Решение

Цитата Сообщение от lesser Посмотреть сообщение
Тоже не вижу в чем прикол. Все это можно легче сделать, используя другие типы.
Цитата Сообщение от alhaos Посмотреть сообщение
вот и я не увидел, какого то весомого аргумента.

Once more!
  1. Цитата Сообщение от volodin661 Посмотреть сообщение
    значительный прирост производительности при сортировке, а также возможны простые операции сравнения туплей, поскольку тупель имеет на борту явную имплементацию интерфейса IComparer.
  2. Цитата Сообщение от volodin661 Посмотреть сообщение
    для C# может и сгодится, а для Powershell практического применения не придумывается.
доп. ко второй цитате:
преимущества Туплей как single об`екта, но зато с полями являются таковыми только в C#.

доп. к первой цитате ( про IComparer ):
PowerShell
1
2
3
4
5
6
7
8
9
$t1 = [Tuple]::Create("x", 2)
$t2 = [Tuple]::Create("y", 1)
$t3 = [Tuple]::Create("X", 2)
$t4 = [Tuple]::Create("Y", 1)
 
$h1 = @{x=2}
$h2 = @{y=1}
$h3 = @{X=2}
$h4 = @{Y=1}
# а теперь посравниваем:

1) Сначала в навалку ( навальный способ? ) через Sort-Object
PowerShell
1
$t1,$t2,$t3,$t4 | Sort-Object
output:
Code
1
2
3
4
5
6
Item1 Item2 Length
----- ----- ------
x         2      2
X         2      2
y         1      2
Y         1      2
PowerShell
1
$h1,$h2,$h3,$h4 | Sort-Object
output:
Code
1
2
3
4
5
6
Name                           Value
----                           -----
x                              2
y                              1
X                              2
Y                              1
Как тебе такое, Илон Маск ?

2) А теперь индивидуальный подход:

PowerShell
1
2
$t1 -gt $t2    # False (норм)
$h1 -gt $t2   #  a-a-a-a-a!!!   катастрофа
3) и вишенка на торте: создаем об'екты $h0, $t0, совпадающиe внешне (по-человечески) с $h1, $t1 соответственно
PowerShell
1
2
3
4
5
6
$h0 = @{x=2}
$t0 = [Tuple]::Create("x", 2)
 
# И сравниваем
$h0 -eq $h1   # False ( потому что экземпляры об'ектов разные, а сличать потроха - не царское дело
$t0 -eq $t1     # True ( из-за IComporable сличаются не сами экземпляры, а их потроха )

И вот это, повторюсь, единственное преимущество, которое я наблюдаю:

получили миллион записей из CSV, разложили массив туплей ( каждая запись - 1 тупель )
и на выходе имеем быструю сортировку и возможность безболезненного индивидуального сравнения записей.
2
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 701
17.02.2021, 21:06
А зачем сортировать четыре хэш-таблицы? Понятно, что там результат неправильный.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$h = [hashtable]::new([StringComparer]::Ordinal) # keys case sense
 
$h.Add('x',2)
$h.Add('y',1)
$h.Add('X',2)
$h.Add('Y',1)
 
$h.GetEnumerator() | Sort-Object -Property key
 
Name                           Value
----                           -----
x                              2
X                              2
y                              1
Y                              1
 
$h.GetEnumerator() | Sort-Object -Property value
 
Name                           Value
----                           -----
y                              1
Y                              1
x                              2
X                              2
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.02.2021, 05:33  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
Что ты имеешь в виду? Покажи пример.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
function foo{
    param(
        [Parameter(Mandatory, Position = 0)]
        [ValidateRange(0, 5)]
        [Int]
        $tItem1,
 
        [Parameter(Mandatory, Position = 1)]
        [ValidateSet("Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto")]
        $tItem2
        )
}
Добавлено через 51 минуту
volodin661, Убедили, IComparer и тупли вещь удобная, хоть и из приведенных примеров на практике я не встречал ни разу.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
18.02.2021, 12:02
Цитата Сообщение от alhaos Посмотреть сообщение
[Int]$tItem1
О массивах(и их разновидностях) говорим же
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.02.2021, 12:30  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
О массивах(и их разновидностях) говорим же
Это да, но я о приведенном вами примере

PowerShell
1
2
3
4
5
6
7
8
9
function foo{
    param([Tuple[Int, String]]$t)
 
    $t.Item1  # Заранее знаем: имя - Item1 ; тип - Int
    $t.Item2  # Заранее знаем: имя - Item2 ; тип - String
    $t.Length # Заранее знаем: размер -  2 
}
 
foo ([Tuple]::Create(1, "a"))
вы так предлагаете это использовать?
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
18.02.2021, 15:08
True
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.02.2021, 15:13  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
True
тогда я не понимаю что вас не устроило в моем ответе.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
18.02.2021, 15:29
Цитата Сообщение от alhaos Посмотреть сообщение
что вас не устроило в моем ответе.
Мы здесь сравниваем: Hashtable, List, Array, ... Vs Tuple.
Я описал отличия, которые могут быть полезными при использовании кортежа в качестве параметра.
При чем здесь примитив [Int]?
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
18.02.2021, 15:43  [ТС]
Цитата Сообщение от Fors1k Посмотреть сообщение
Их удобно использовать, например, для параметров функции
Цитата Сообщение от alhaos Посмотреть сообщение
опять же пропадают плюшки валидации например.
я же не сказал что это преступно или аморально, передавая подобным образом параметры придется о их валидации позаботиться другими средствами. Так же как если эти параметры передавать списками, массивами, хешами и т.д. Я лично, лично я, не вижу особого удобства в таком способе, это ИМХО.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
18.02.2021, 16:17
- Их удобно использовать, например, для параметров функции (вместо массивов, очевидно, так как речь идет о сравнении Hashtable, List, Array, ... Vs Tuple).
- Опять же пропадают плюшки валидации (если использовать кортежи вместо массивов, очевидно, так как это является ответом на вышеприведенную реплику).
- Wat??
- Ну да, если использовать кортеж, то пропадет валидация, которой и так не было бы при использовании массивов(сравнение с которыми мы и ведем), так что ничего не пропадет...

Вроде ничего не упустил

"Счастье - это когда тебя понимают."(с) Генка Шестопал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2021, 16:17
Помогаю со студенческими работами здесь

Seekeen 1.0 build 140 Что за зверь такой?
У себя в "Установка и удаление програм" обнаружил Seekeen 1.0 build 140 весом 0,21мб. Говорят что это "троян". Кто...

Что это за зверь такой? и зачем он это делает?
Посмотрите страничку. http://clubs.ya.ru/4611686018427401587/rep...&ncrnd=3152 Как я понимаю это робот. Но зачем на блоге...

OnTime - чо за зверь такой?
Люди, объясните плз, как правильно пользоваться этой мудрой функсией? Чтобы она сработала, нужно нажать F5. Прально? Но тогда функция не...

Что за зверь С#?
Всем привет, всё время жил с VB 6.0. А тут предложили работу, а там нужен С#. 'Шо за ботва'? Если серьезно: поделитесь мнением,...

Что за зверь?
Всем привет, друзья ! ! ! Сегодня дружок принёс видеокарту. (где он её нарыл я не знаю :D) . Фотки видеокарты прилагаю. Меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru