arrays - 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 的情况下解决相同的任务?使用单个运算符将字符串拆分为数组类型对象的某种方法?
解决方案
这是因为[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
,这意味着该函数不返回任何内容,而是直接对数组进行操作
推荐阅读
- matrix - 从矩阵获取旋转,OpenMaya
- logging - 如何关闭 dbt 日志?
- vue.js - Vuex 提交成功,但 ui 或视图仅在刷新浏览器时更改(非响应式)
- node.js - ##[错误]在 Microsoft 池中找不到满足指定要求的代理:npm, Agent.Version -gtVersion 2.182.1
- python - 如何在 vscode 中将目录标记为源?尝试了所有可能的解决方案,没有任何效果
- mongodb - 非法指令(核心转储)mongodb Ubuntu 20.04 LTS
- javascript - 如果一个数据填充在 ui 中反应本机,如何在下拉列表和选择中填充数组值
- windows - 我的批处理文件没有我想要的那么快
- flutter - 如何将复杂的嵌套 Json 作为来自 Flutter 的 http post 请求发送到正文中
- windows - Windows bash 中的错误/非法格式或缺少 url