返回列表 发帖

[原创代码] powershell 输出 a~z 和 aa~zz

powershell 借鉴了 perl 的许多语法,比如 .. 范围操作符
在 perl 中,列举从 a~z 的字符可以这样:
print 'a'..'z';COPY
但 powershell 使用 'a'..'z' 则会报错 无法将值“a”转换为类型“System.Int32”。错误:“输入字符串的格式不正确。”
这是因为 'a' 是一个字符串(system.string 类型),而且不是合法的二进制、八进制、十进制或十六进制数字格式
也就是说,咱可以这样:
[char[]]([char]'a'..[char]'z') -join ''COPY
略麻烦,不过反正实现了,有疑惑的童鞋可以参考附文部分的解释

拔特,perl 的范围运算符还有这样的用法:
@arr = 'aa'..'zz';
print "@arr";COPY
尼玛还能这样得到组合?perl 也太犀利了吧...

想了半天用 powershell 好像没有比较方便的办法,就写了这么一大段:
$start = 'aa';
$end = 'zz';
$result = @()
for($i=$start.length;$i--;){
$tmp = @()
$arr = [char[]]([char]$start[$i]..[char]$end[$i])
foreach($r in $result){
foreach($a in $arr){
$tmp+=[string]($r + $a);
}
}
if($tmp.length){
$result = $tmp
} else {
$result = $arr
}
}
$result -join ' 'COPY
不知道有没有更好的方案
不知道 powershell 以后会不会支持 $Array1 * $Array2、 $Array1 * 'String' 这样的数组组合语法

-----------------------------------------------------------

[char[]]([char]'a'..[char]'z') -join '' 的简单解释:
1、[char]'a'
[char]'a''a' 的区别在于前者是单个字符而后者是字符串
强制类型转换为字符类型可避免自动类型转换时调用用于字符串的方法
2、([char]'a'..[char]'z')
当出现运算符时,char 类型被强制转换成 int32 类型,得到该字符的 ansi 码,并参与运算
3、[char[]]
将所得数组理解为字符数组,最后得到的其实是 string 类型
4、-join ''
这就不用解释了吧
可有可无,只是模仿 perl 的输出格式...COPY

竖排,,,,
[char[]](97..122)COPY
横排,,
[char[]](97..122) -as [string]COPY
1

评分人数

    • CrLf: 一周目第一关技术 + 1
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

$Array = [char[]](97..122)
$result = foreach($a in $Array){
    foreach($b in $Array){
        $a+$b
    }
}
$result -join ' 'COPY
1

评分人数

    • CrLf: 一周目第一关技术 + 1

TOP

回复 2# Linuxer


回复 3# terse


    “你们已打(和了个谐)倒一周目第一关小头目”

TOP

返回列表