PowerShell Poker Hand - проблема с созданием массива - PullRequest
2 голосов
/ 19 марта 2019

Я работаю над сайд-проектом (не для класса) и пытаюсь улучшить себя с помощью PowerShell.Я работаю над проблемой, когда я собираю Покерную комбинацию с рангом и мастью карты.

Этот первый пример работает просто отлично

$a='A'
$num=2..9
$jkq='J','K','Q'

Этот пример не работает

$rank = 'A'+2..9+'J','K','Q'

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

Для пояснения первый пример кода строит массив из 12 элементов.Во втором примере создается массив с 1 элементом, равным "A2 3 4 5 6 7 8 9J K Q" Очевидно, это выглядит как ошибка типа между построением строки и массива.однако даже с указанием [array]$rank я не получаю успешно построенный массив.

Это также не работает

[array]$rank = @('A'+(2..9)+'J','K','Q')

1 Ответ

3 голосов
/ 20 марта 2019

Поскольку вы пытаетесь конкатенация массива , вы должны убедиться, что ваш первый операнд является массивом (тоже):

@('A') + 2..9 + 'J','K','Q'

@('A') гарантирует, что 'A' является массивом, используя оператор подвыражения массива PowerShell .
Важно :@(...) гарантирует , что ... является массивом, но это не обязательно конструкция единица - если то, что ... оценивает уже , является массивом, оставлено в покое , свободно говоря.

В качестве альтернативы , вы можете использовать одинарную форму , - PowerShell массив - конструкция оператор («оператор запятой») - для построения 'A' в виде одноэлементного массива:

, 'A' + 2..9 + 'J','K','Q'

Оба решения приводят к массиву, которыйэквивалент (в виде исходного кода):

'A', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'K', 'Q'

Что касается того, что вы пытались :

С такими операторами, как +которые имеют типe-специфичные перегрузки , обычно тип LHS определяет поведение .

В вашем случае (первый) LHS является (одиночным) string , 'A', поэтому + выполняет string сцепление.

То есть оставшиеся операнды были добавлены к строке 'A' в их строковая форма , которая в случае массивов означает разделенный пробелами список элементов массива.

Упрощенный пример:

PS> 'A' + ('B', 'C')
AB C

То есть строковое значение массива 'B', 'C' - эквивалент 'B C' - добавлено к строке 'A'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...