我有一些变量如下:
$a = "string1"
$b = "string2"
$c = "string3"
现在我想定义一个变量$ list,其中包含来自$ a,$ b,$ c的所有内容,如下所示:
$list = "
a: string1
b: string2
c: string3
"
我该怎么做?
***编辑:列表的内容必须像我写的那样完全,这意味着,像#" a:" b:",......也必须一样
答案 0 :(得分:5)
看起来你不想要一个实际的列表,而是一个带有变量列表的字符串。带有变量名称和值的多行字符串可以这样定义:
$list = @"
a: ${a}
b: ${b}
c: ${c}
"@
另一个更有活力的选择是这样的:
$list = 'a', 'b', 'c' | ForEach-Object {
"${_}: $(Get-Variable $_ -ValueOnly)"
} | Out-String
您可以在其中指定包含变量名称的列表,输出包含每个变量名称和相应值的字符串,并在最后将这些字符串合并为单个字符串。
答案 1 :(得分:2)
Powershell有'arrays':
“数组是一种用于存储集合的数据结构 的项目。这些项目可以是相同类型或不同类型。“
在您的情况下,如果您已经有变量,则可以将它们包含在数组中:
$myarray = $a, $b, $c
Write-Host $myarray
或
$myarray = @($a, $b, $c)
Write-Host $myarray
或者您可以创建一个关联数组来输入键值元素:
$otherarray = @{} # create en empty array
$otherarray['a'] = 'string1' # add key-value pairs
$otherarray['b'] = 'string2'
$otherarray['c'] = 'string3'
Write-Host $otherarray.c #print in console example
编辑:根据您的示例我推荐了数组,因为我认为这是一个简单的用例,但是如果您将自行修改它,请更好地使用System.Collection.ArrayList:
$mylist = New-Object System.Collections.ArrayList
$mylist.add($a)
$mylist.add($b)
$mylist.add($c)
$Write-Host $mylist
答案 2 :(得分:1)
[string[]]$list = "string1","string2","string3"
我没有完全阅读你的问题,这里是一个带键=值对的哈希表的例子:
$a = "string1"
$b = "string2"
$c = "string3"
$list = @{
a = $a
b = $b
c = $c
}
最终,这取决于您是否知道如何使用该构造,以及您使用它的原因。有很多方法可以实现3个字符串的简单列表/数组/表。
答案 3 :(得分:0)
您可以使用 New-Object System.Collections.ArrayList 来创建列表并使用它。
例如:
$a = "string1"
$b = "string2"
$c = "string3"
$list = New-Object System.Collections.ArrayList
$list.Add($a)
$list.Add($b)
$list.Add($c)
现在$ list [1]给出了string2。
希望这会有所帮助。 :)
答案 4 :(得分:0)
我怀疑其他答案已经给了你你已经拥有的东西。但是,以下是针对您的问题的不同解释的其他解决方案......
如果您希望在运行时使用UITextField
,resignFirstResponder
和a
中的值填充列表,则可以执行以下操作:
b
即。这会找到变量c
,$a = "string1"
$b = "string2"
$c = "string3"
$list = @('a','b','c') | Get-Variable | ForEach-Object{'{0}: {1}' -f $_.Name, $_.Value}
$list
和a
,并使用基于变量名称和格式为b
的值的字符串填充c
。
或者,如果您希望使用单个“here-string”(即可以是多行的字符串)填充列表,将其拆分为每行一个项目,则可以执行以下操作:
list
这将获取多行字符串并将其拆分为换行符(使用正则表达式确保它以相同的方式处理不同的潜在行结尾,并跳过多个连续换行符以避免在项目之间创建空白条目)。
最后,如果您想从列表中填充变量name: value
,$list = @'
a: string1
b: string2
c: string3
'@ -split '[\r\n]+'
$list.Count #prove that our list contains 3 items rather than 1 multi line item
$list # show the contents of the array
和a
,您可以使用以下内容:
b
答案 5 :(得分:0)
我认为哈希表就是你要找的东西:
$list = @{}
$list.a = 'string1'
$list.b = 'string2'
$list.c = 'string3'
foreach( $item in $list ) {
# do something
}
# get content of hash:
$var = $list['a']
# or
$var = $list.a