【问题标题】:Count length of array and return 1 if it only contains one element计算数组的长度,如果它只包含一个元素,则返回 1
【发布时间】:2012-03-06 08:35:14
【问题描述】:
$cars = "bmw","audi","volvo","vw"
echo $cars.length

返回 4,但是

$cars = "bmw"

返回 3 因为它计算字符数..

如果数组只包含一项,有没有办法可以返回 1?

【问题讨论】:

    标签: arrays powershell


    【解决方案1】:

    其他几个选项:

    1. 使用逗号运算符创建数组:

      $cars = ,"bmw"
      $cars.GetType().FullName
      # Outputs: System.Object[]
      
    2. 使用数组子表达式语法:

      $cars = @("bmw")
      $cars.GetType().FullName
      # Outputs: System.Object[]
      

    如果你不想要一个对象数组,你可以向下转换为你想要的类型,例如一个字符串数组。

     [string[]] $cars = ,"bmw"
     [string[]] $cars = @("bmw")
    

    【讨论】:

    • 谢谢安迪!我看到我的脚本失败了,因为 if system.object[] 的值。有没有办法将内容处理为字符串?
    • @Sune 是的,您只是向下转换为字符串数组。我添加了示例。
    • 使用字符串数组的建议对我不起作用。我正在从 SQL 数据库中获取数据,它返回“System.Data.DataRow”而不是值。所以我不得不使用@($array).count 下面的解决方案。
    【解决方案2】:

    而不是写echo $cars.lengthecho @($cars).length

    【讨论】:

    • 这对我帮助很大。具有 1 个元素“$packs.Count”的数组没有返回任何内容。有几个元素它运作良好。将其更改为“@($packs).count”后,它也为 1 个元素返回 1。十分感谢!你能解释一下这种行为吗?
    【解决方案3】:

    声明你的数组为:

    $car = array("bmw")
    

    编辑

    现在使用 powershell 语法:)

    $car = [array]"bmw"
    

    【讨论】:

    • 感谢您的帮助!不过,我不接受它作为答案,因为语法已关闭。也许是另一种语言?还是谢谢你:)
    【解决方案4】:

    也许我遗漏了一些东西(这里有很多赞成投票的成员的答案似乎与我的看法不同,这似乎令人难以置信,我是正确的),但长度并不是计算某些东西的正确术语。长度通常用于获取你得到的,而不是你想要的。

    $cars.count 应该会给你你想要的东西。

    【讨论】:

    • 取决于具有这些属性的对象类型。比如说file(或string),它的length 指的是它的大小,而它的count 指的是相关文件的数量。所以它们并不相同。但是对于arrayarraylength 和它的count 是相同的。如果愿意,请跳入兔子洞@Length, Count and arrays – Cloud Notes。没那么深:)
    猜你喜欢
    • 2017-02-06
    • 2018-12-10
    • 1970-01-01
    • 2016-06-18
    • 2021-07-19
    • 2014-11-04
    • 2018-07-17
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多