gpt4 book ai didi

arrays - 数据行到字符串到数组的问题

转载 作者:行者123 更新时间:2023-12-03 01:28:55 25 4
gpt4 key购买 nike

我遇到一个很奇怪的问题。我有一个装有一堆行的对象。我可以很好地访问它们,但是我需要附加一个“。” (点)到其中的每个值,因此最终我使用for每个循环将每个记录转换为字符串,并添加一个“。”修剪值后。但是,现在的问题是,我想将这些行中的每行(并且这些行只有一个列/项)分配给另一个数组/对象,以便以后可以访问它们。

问题是,即使我声明一个对象/数组变量并分配字符串转换后的数据行,该对象变量仍会不断转换为String,而我似乎无法避免。

请帮忙。这是修改后的代码示例:

[String] $DBNms = @();

ForEach($DBName in $objDBNms){

$tempText += $DBName.Item(0).ToString().Trim() + "."

$DBNms += $tempText
}

Write-Host($DBNms.GetType()) #And this is showing up a string, while I want it to be an array.

而且,如果我打印$ DBNms,它的确显示了一个串联在一起的字符串,而我实际上希望它像$ DBNms [0] =第一个项目值,$ DBNms [1] =第二个项目值,依此类推。

最佳答案

[String] $DBNms = @();使$DBNms成为类型受限的变量,这是因为将文字 [string] 类型放置在变量$DBNms的左侧,然后将其类型锁定为字符串;也就是说,作为一个字符串作为

您正在寻找创建一个字符串数组,在PowerShell中将其表示为[string[]] :

[string[]] $DBNames = @()

PowerShell的类型转换是自动的(并且非常灵活),因此[String] $DBNms = @()不会报告错误,它会悄悄地将空数组(@())转换为空字符串(根据类型约束的要求):
PS> [string] $DBNames = @(); '' -eq $DBNames
True

一种从数组中多次迭代收集值的更有效的方法是使用foreach语句作为表达式,在这种情况下,PowerShell会自动为您收集输出:
[string[]] $DBNms = foreach ($DBName in $objDBNms){ 

# Output this expression's value as-is.
# PowerShell will collect the individual iterations' values for you.
$DBName.Item(0).ToString().Trim() + "."

}

上面的内容不仅比您的原始方法更简洁,而且更重要的是效率更高:
  • 实际上,您不能直接添加(附加到)数组,因为它是不可变的数据结构。
  • 每当您对数组使用+= 时,PowerShell要做的就是在幕后分配一个新的数组,并复制原始元素并附加新元素。然后,新数组将自动分配回该变量。


  • 注意:替代和使用整个循环作为表达式的下一个最佳解决方案是使用,这是一种可有效扩展的列表类型,尤其是[System.Collections.Generic.List[object]]( System.Collections.Generic.List`1 ):
    # Create the list.
    # The 'System.' namespace prefix is optional.
    [Collections.Generic.List[string]] $DBNms = @()

    foreach ($DBName in $objDBNms) {

    # Add to the list, using its .Add() method.
    # Note: Do NOT try to add with +=
    $DBNms.Add($DBName.Item(0).ToString().Trim() + ".")

    }

    如果循环在每次迭代中不仅仅输出单个值,例如需要追加到多个集合,则将需要这种方法。

    注意:通常使用 System.Collections.ArrayList 实例代替;然而:
  • 不再建议使用来使用这种类型的(请参阅链接的帮助主题中的警告);请改用[System.Collections.Generic.List[object]],这还可以使您强烈地键入集合(用感兴趣的类型替换[object],例如上面代码中的[string])。
  • 它的缺点是其.Add()方法具有返回值,您需要显式地使其静音(例如$null = $lst.Add(...)),以免意外污染代码的输出流(产生意外的额外输出)。
  • 关于arrays - 数据行到字符串到数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029045/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com