在PowerShell中将字符串转换为整数数组

10
我将尝试转换以下这个字符串,它看起来像这样:
    2,3,4,5,6,20..30

将其转换为整数数组。以下是我当前的代码:

[string]$a = "2,3,4,5,6,7"
[array]$b = $a.split(",")
[array]$c = foreach($number in $b) {([int]::parse($number))}

这个方法可以工作,但不能处理20到30的范围。我该如何使它适用于这个范围?

3个回答

8
您可以使用Invoke-Expression命令来解释10..30位,如果[int]::Parse()方法调用失败。

这是一个完整的、可工作的示例。

[string]$a = "2,3,4,5,6,7,10..30";
[array]$b = $a.split(",");
[array]$c = foreach($number in $b) {
    try {
        [int]::parse($number)
    }
    catch {
        Invoke-Expression -Command $number;
    }
    }

$c;

1
谢谢,这正是我在寻找的! - ImpossibleSqui
@ImpossibleSqui 不用谢 - 很高兴能帮到你! - user189198

7

一句话搞笑语:

$c = "2,3,4,5,6,7,10..30".split(',') | % {iex $_}

干得好,但如果没有看Trevor的代码和解释,我就无法理解你在这里做什么! - ImpossibleSqui
@ImpossibleSqui 谢谢,但我真诚地希望你不会使用不必要时产生异常的代码 ;) - CB.
我无法拒绝一行代码...在尝试了你们两个的代码后,我最终选择了你的,因为它更简单。 再次感谢! - ImpossibleSqui
@ImpossibleSqui 很高兴能帮到你!你随时可以更改你的选择答案 ;) - CB.
如果字符串不包含逗号 - 拆分仍使其成为一个元素的数组 - 没问题。但是在转换为数字后,它会产生Int32变量而不是数组 :( - Geograph
@Geograph,您可以将表达式括在@()中,以始终获得一个数组。 - Soumya Mahunt

0

在字符串中,.. 会被原样使用,而不会扩展为一个范围。

因此,$a = "1 .. 5" 实际上是 1 .. 5 而不是 1、2、3、4、5。

为了使程序正常工作,您需要对 ,.. 进行分词并进行扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接