Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
1

Элементы массива

01.07.2019, 09:03. Просмотров 1944. Ответов 13
Метки нет (Все метки)

Доброго времени суток, мешать мухи и котлеты это конечно удобно, но и неудобно...

PowerShell
1
$('green', @('black','brown'), 'red') | select @{n='first'; e={$_[0]}}
Код
first
-----
    g
black
    r
как лучше в такой ситуации получить?

Код
first
-----
green
black
red
Добавлено через 10 минут
PowerShell
1
$('green', @('black','blue'), 'red') | select @{n='first'; e={if($_.GetType().BaseType.Name -eq 'Array'){$_[1]}else{$_}}}
У меня получилось только через условие и GetType()
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2019, 09:03
Ответы с готовыми решениями:

Переписать элементы массива, не равные нулю, в начало массива, а нулевые элементы - в конец массива
Дан одномерный массив. Все его элементы, не равные нулю, перепишите (сохраняя их порядок) в начало...

Поменять местами элементы массива А, имеющего нечётный индекс, на элементы массива В, имеющие чётный индекс, и найти минимальные элементы Амах и В мах
даны два массива А и В по 20 элементов в каждом. Поменять местами элементы массива А, имеющего...

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

Элементы массива должны быть упорядочены так, чтобы сначала шли элементы массива, отличающиеся от максимального на 80%.
Здравствуйте! Элементы массива ложны быть упорядочены таким способом, чтобы сначала шли элементы...

Удалить элементы расположенные между максимальным и минимальным элементами массива Х. Элементы массива Х вычисляются по формуле Xi=((-1)^i)*((i^2)-3*i), где i=1,2,...,10.
Удалить элементы расположенные между максимальным и минимальным элементами массива Х. Элементы...

13
bidstrup
304 / 125 / 18
Регистрация: 11.03.2018
Сообщений: 572
01.07.2019, 09:19 2
есть оператор -is.
есть statement switch

PowerShell
1
switch ('green', @('black','blue'), 'red') { {$_ -is [Array]} { $_[1] } Default {$_} }
1
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
01.07.2019, 09:50  [ТС] 3
так короче и элегантнее, но по сути то же самое.
0
greg zakharov
Покинул форум
2279 / 939 / 259
Регистрация: 07.05.2015
Сообщений: 1,832
01.07.2019, 10:39 4
Лучший ответ Сообщение было отмечено alhaos как решение

Решение

alhaos, если рассматривать данный массив как массив массивов, а не как массив из строк и массивов строк, можно задействовать Group-Object:
PowerShell
1
'green', @('black', 'blue'), 'red' | group {($_ -split ' ')[-1]} | select name
Вернет:
PowerShell
1
2
3
4
5
Name
----
green
blue
red
Стоит изменить индекс на нуль:
PowerShell
1
'green', @('black', 'blue'), 'red' | group {($_ -split ' ')[0]} | select name
Получим:
PowerShell
1
2
3
4
5
Name
----
green
black
red
3
01.07.2019, 10:39
bidstrup
304 / 125 / 18
Регистрация: 11.03.2018
Сообщений: 572
01.07.2019, 11:25 5
на унарном -split можно сэкономить пару центов
0
greg zakharov
Покинул форум
2279 / 939 / 259
Регистрация: 07.05.2015
Сообщений: 1,832
01.07.2019, 11:41 6
bidstrup, просто оператор -split превратит массив из строк и массивов строк в массив строк:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS E:\sandbox> ('green', @('black', 'blue'), 'red' -split ' ').GetType()
 
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String[]                                 System.Array
 
PS E:\sandbox> ('green', @('black', 'blue'), 'red' -split ' ')[0]
green
PS E:\sandbox> ('green', @('black', 'blue'), 'red' -split ' ')[1]
black
PS E:\sandbox> ('green', @('black', 'blue'), 'red' -split ' ')[2]
blue
PS E:\sandbox> ('green', @('black', 'blue'), 'red' -split ' ')[3]
red
Это осложнит последующую выборку.
0
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
01.07.2019, 11:52  [ТС] 7
Цитата Сообщение от greg zakharov Посмотреть сообщение
'green', @('black', 'blue'), 'red' | group {($_ -split ' ')[0]} | select name
как то вот этот вариант мне нравится больше
0
bidstrup
304 / 125 / 18
Регистрация: 11.03.2018
Сообщений: 572
01.07.2019, 12:28 8
унарный -split
PowerShell
1
'green', ('black', 'blue'), 'red' |group{(-split$_)[0]} |select name
экономит пару центов
0
greg zakharov
Покинул форум
2279 / 939 / 259
Регистрация: 07.05.2015
Сообщений: 1,832
01.07.2019, 12:57 9
Лучший ответ Сообщение было отмечено alhaos как решение

Решение

bidstrup, похоже несколько бессонных ночей берут свое: теперь понятно что вы имели в виду. Однако еще большей экономии можно достичь следующим образом:
PowerShell
1
[String[][]]('green', @('black', 'blue'), 'red')|%{$_[-1]}
2
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
01.07.2019, 13:06  [ТС] 10
Да так все ровно и гладко, [String[][]] про это где читать?
0
greg zakharov
Покинул форум
2279 / 939 / 259
Регистрация: 07.05.2015
Сообщений: 1,832
01.07.2019, 13:17 11
Цитата Сообщение от alhaos
[String[][]] про это где читать?
Это просто явное указание типа, хотя в данном случае можно это также интерпретировать как приведение к типу.
0
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
01.07.2019, 13:31  [ТС] 12
Цитата Сообщение от greg zakharov Посмотреть сообщение
Это просто явное указание типа, хотя в данном случае можно это также интерпретировать как приведение к типу.
я может излишне очевидные вещи спрашиваю, но мне будет трудно использовать решение, если его недостаточно понимаю.

[string[][]] это что массив строк?

PowerShell
1
2
3
4
5
6
7
8
9
Remove-Variable g
[string[][]]$g
$g += 'a'
$g += 'b'
$g += 'c'
$g
$g.count
abc
1
но он ведет себя как строка
0
bidstrup
304 / 125 / 18
Регистрация: 11.03.2018
Сообщений: 572
01.07.2019, 13:48 13

Не по теме:

greg zakharov, посмотри на
Проблема с переменными в обертке , pls



Добавлено через 16 минут
Жаль, что у powershell отсутствует синтаксис вызова subscript-оператора [] как method()

Тогда бы выглядело вот так:
PowerShell
1
([String[][]]('green', @('black', 'blue'), 'red')).'[]'(0)
0
greg zakharov
Покинул форум
2279 / 939 / 259
Регистрация: 07.05.2015
Сообщений: 1,832
01.07.2019, 22:17 14
Цитата Сообщение от bidstrup
Жаль, что у powershell отсутствует синтаксис вызова subscript-оператора [] как method()
А что вам мешает определить подобный метод самостоятельно?
PowerShell
1
2
3
[Array] | Add-Member -MemberType ScriptMethod -Name '[]' -Value {([String[][]]$args).ForEach{$_[0]}}
# применим новоиспеченный метод объекта Array к нашему массиву
[Array].'[]'('green', @('black', 'blue'), 'red')
Командлет Add-Member довольно либерален по части кастовости, поэтому необязательно цеплять наш метод к типу Array, - на его месте вполне может быть, скажем, String, однако все же логичней и понятней, если метод или свойство для объекта связываются относительно имени типа.

Не по теме:

Относительно переменных еще не смотрел.

1
01.07.2019, 22:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2019, 22:17

Сформируйте третий массив, в котором в начале расположены элементы первого массива, а затем элементы второго массива
Даны два целочисленных массива. Сформируйте третий массив, в котором в начале расположены элементы...

Написать программу, которая сортирует элементы массива, большие введеного значения. Элементы массива получают из фай
Unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Получить третий массив который на четных номерах элементы второго массива на нечетных элементы первого массива
помогите с задачей: Даны два массива. Получить третий массив который на четных номерах элементы...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru