PowerShell扑克之手-构建数组的问题

时间:2019-03-19 20:34:57

标签: arrays powershell

我正在开发一个辅助项目(不适用于课堂),并尝试使用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 个答案:

答案 0 :(得分:3)

由于您正在尝试连接数组 ,因此必须确保您的 first 操作数是 array < / em> (也是):

@Model.Aciklama.Truncate(50)

@('A') + 2..9 + 'J','K','Q' 使用PowerShell的array subexpression operator确保@('A')是一个数组。
重要'A' 确保 @(...)是一个数组,但不一定 construct 一个-如果是的话...的计算结果已经是一个数组,松散地说,它是一个单独的

或者,您可以使用一元形式的... -PowerShell的array-construction operator(“逗号运算符”)-构造{{ 1}}作为单元素数组:

,

两个解决方案都导致一个数组等于(表示为源代码):

'A'

关于您尝试过的事情

对于诸如, 'A' + 2..9 + 'J','K','Q' 之类的具有类型特定重载的运算符,通常 确定行为的 LHS 类型

在您的情况下,(第一个)LHS是一个(单个)字符串'A', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'K', 'Q' ,因此+执行 string 串联。 / p>

也就是说,其余的操作数以它们的 stringified形式附加到字符串'A'上,在数组的情况下,这意味着用空格分隔该数组元素的列表。

一个简化的示例:

+

也就是说,将数组'A'的字符串化(与PS> 'A' + ('B', 'C') AB C 等效)附加到字符串'B', 'C'