我正在尝试使用powershell从字符串Consequences
打印奇数字符。
下面的代码正在运行,但有没有其他简单的方法来执行此任务?比如使用-split
函数?
$student_name = "Consequences"
$out = ""
for($i = 0; $i -lt $student_name.Length ;$i++ ){
if ($i % 2 -eq 0 ){
$out += $student_name[$i]
}
}
$out
它应该打印输出如下
Cneune
答案 0 :(得分:1)
您可以使用单个foreach
循环和string
方法完成您尝试执行的操作:
$word = 'Consequences'
@(foreach ($c in ($word -split '')) {
if ($word.IndexOf($c) % 2 -eq 0) { $c }
}) -join ''
我使用数组运算符(@()
)强制foreach
将项目作为单个集合返回,以便-join
正常工作。
答案 1 :(得分:1)
好的,我会做一个正确的答案:
$out = (0..$student_name.length | ?{($_ % 2) -eq 0} | %{$student_name[$_]}) -join ''
这将获取从0到字(0..$student_name.length
)中字符数的所有整数。然后它过滤只保留奇数整数(?{($_ % 2) -eq 0}
)。它使用这些整数从字符串中的该位置的字符串中获取每个字符(%{$student_name[$_]}
)。最后,它将角色和连接在一起成为一个字符串(-join ''
)。
答案 2 :(得分:1)
再展示两种可用的技术。第一个使用-join
的一元形式,利用语句可以返回值和计数2而不是检查数字是否均匀的事实。
$student_name = "Consequences"
-join @(for ($i = 0; $i -lt $student_name.Length; $i += 2) {
$student_name[$i]
})
第二个解决方案与第一个解决方案类似,但使用foreach
循环和$foreach
枚举器而不是for
循环。
-join $(foreach ($c in [char[]] $student_name) {
$c
[void] $foreach.MoveNext()
})
答案 3 :(得分:0)
这是一个基于Powershell中的.NET Linq的解决方案,可能是最快的解决方案:检查索引器的第一位是否设置为确定奇数字符。从char-array中删除零字符并加入到字符串。
f
答案 4 :(得分:0)
我的一位朋友提出了这个答案,虽然它的概念相同。
$long_word = "Consequences"
-join ($long_word -split '(.{2})').ForEach({$_[0..0]})