首页 > 解决方案 > Powershell:将字符串拆分为字符串的*array*

问题描述

我有一个由定义符号分隔的值组成的字符串。我需要以相反的顺序将其转换为另一个包含相同值的字符串。

乍一看,这项任务看起来微不足道。用于将-split字符串拆分为字符串数组,然后使用[array]::reverse函数和-join.

任务完成了吗?错误的。反向函数需要一个 Array 类型的对象作为参数,并-split返回一个 String 类型的对象,即使它看起来像一个数组。反向函数根本无法使用它并返回一个空值。

当然,总有一个经典的类 C 解决方案,带有 For 循环:

$arr = $str1.split(".")
$str2 = ""
for ($i = $arr.length-1; $i -ge 0; $i--) {
   $str2 += $arr[$i]
}

但是,在 PS 中,它看起来很粗糙且无效。是否有另一种更优雅的解决方案可以在不使用 For 的情况下解决相同的任务?使用单个运算符将字符串拆分为数组类型对象的某种方法?

标签: arraysstringpowershell

解决方案


这是因为[array]::Reverse是就地操作,也就是说它直接对数组进行操作,就地修改元素。

PS> $str = "H.I.1"
PS> $tmp = $str.split(".")
PS> [array]::Reverse($tmp)
PS> $tmp
1
I
H

为了确认这一点,我们可以检查函数签名。

PS> [array]::reverse

OverloadDefinitions
-------------------
static void Reverse(array array)
static void Reverse(array array, int index, int length)

如您所见,它 return void,这意味着该函数不返回任何内容,而是直接对数组进行操作


推荐阅读