当前位置: 首页 > 知识库问答 >
问题:

Powershell 5.1三元组,带数组赋值

殷宇
2023-03-14

我对Powershell 5.1中的三元运算符有一个问题。如果我尝试分配数组@(...),它无法按预期工作:

    # I can assign an array to a variable:
    $a=@("TRUE")
    write-host "a:" $a
    
    # I can do that in a proper if/then statement, too:
    $b = @(if ($false) {@("True")} else {@("False")})
    write-host "b:" $b
    
    # Assignment of string constants works fine with ternary syntax:
    $c = @( {"True"} , {"False"} )[!$true]
    write-host "c:" $c
    
    # but not with array assignments:
    $d = @( {@("True")} , {@("False")} )[!$false]
    write-host "d:" $d
    # Expected: "False". 
    # Actual output: @("False")

输出:

a: TRUE
b: False
c: "True"
d: @("False")

关于三元运算符的一条线索并没有为我澄清这一点。(PowerShell中的三元运算符)

更新:$d需要是一个数组,以及两个内部项目。为了简单起见,这里只显示了一个字符串常量

共有1个答案

闾丘照
2023-03-14

注意:

  • PowerShell(Core)7现在有一个内置的三元运算符,这样您就可以使用类似于<code>$var=$true?“真”:“假”

不要在操作数周围使用{…}{…}用于脚本块文字,这些文字在字符串上下文中计算为逐字内容(不带分隔符)。

省略封闭的 {} 解决了眼前的问题:

$d = @( @("True") , @("False") )[!$false]
write-host "d:" $d

但是,使用@(),数组子表达式运算符似乎既冗余又无效,具体取决于您的意图;上面相当于:

$d = ( "True", "False" )[!$false]
write-host "d:" $d

< sup >注意< code>@(...)对于数组文本从不需要;使用数组构造函数运算符< code >、通常就足够了。更多信息请见本答案的中间部分。

如果您希望<code>$d</code>是一个数组,则需要将<code>@(…)</code>应用于整个表达式:

# $d is now a 1-element array containing 'False'
$d = @(( "True", "False" )[!$false])
write-host "d:" $d

或者,将< code>$d类型约束为数组:

# $d is now a 1-element array containing 'False'
[array] $d = ( "True", "False" )[!$false]
write-host "d:" $d
 类似资料:
  • F90中,允许把整个数组作为一个操作数进行操作,也允许在赋值语句中对整个数组进行赋值,就像对一个简单变量的操作和赋值一样。针对数组的特性,也有专门的运算方法和内在函数。 5.2.1 赋值 a) 赋值方式 数组的赋值可以使用赋值语句和数组构造器。 F90中数组赋值语句的形式为:V=e,V代表数组名或数组片段,e为数组表达式,它们必须有相同的形状(即维数相同,每维长度相同但上下界可不同)。当V大小为0

  • 本节介绍稀疏矩阵的三元组 顺序表压缩存储方式。 通过《 矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; 矩阵的总行数和总列数; 图 1 稀疏矩阵示意图 例如,图 1 是一个稀疏矩阵,若对其进行压缩存储,矩阵中各非 0 元素的存储状态如图 2 所示: 图 2 稀疏矩阵的压缩存储示意图 图 2 的数组中,存储的是三元组(

  • 本文向大家介绍对numpy中数组元素的统一赋值实例,包括了对numpy中数组元素的统一赋值实例的使用技巧和注意事项,需要的朋友参考一下 Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入。今天单独列写相关的知识点,进行总结一下。 先看两个代码片小例子: 例子1: 例子2: 这两段看上去似乎出现了行为不一致,其实利用一般面向对象的标签理解模型还是能够理解的。 例子1中,加上了索

  • 我有一个包含加密符号列表的数组,例如(因为有一千多个) 我需要创建一个多维数组,包含所有可能的组合,例如。 生成的数组不应该有重复的排列,如, 我真的不知道从哪里开始。我能得到的最接近的方法是用一些对构建一个数组(然后,不是写出来的,目标是逐渐搜索并添加缺少的组合): 任何帮助都将不胜感激。我的项目的其余部分是用Python 3.8编写的。

  • 问题内容: 我有一个功能: 排队 resultArray.append(tempDict) 我有一个错误: 调用中缺少参数“ ccomments”的参数 为什么?请帮助.... 问题答案: 在我看来,就像对待元组有点像可变参数,并试图扩展元组以匹配其自身的参数。它抱怨您的第二个参数,因为它只期待一个。我没有在任何地方看到这种行为的记录,因此我想说这是Swift中的错误。 使用追加运算符似乎没有这个

  • 根据所提供的函数对每个元素进行迭代,将这些元素分成两个数组。 使用 Array.reduce() 创建两个数组的数组。 使用 Array.push() 将 fn 返回为 true 的元素添加到第一个数组,而 fn 返回 false 的元素到第二个元素。 const partition = (arr, fn) => arr.reduce( (acc, val, i, arr) => {