如何使用powershell从字符串打印奇数字符

如何使用powershell从字符串打印奇数字符,powershell,printing,Powershell,Printing,我正在尝试使用powershell打印字符串结果中的奇数字符 下面的代码正在运行,但是否有其他简单的方法来执行此任务?喜欢使用分割函数吗 $student_name = "Consequences" $out = "" for($i = 0; $i -lt $student_name.Length ;$i++ ){ if ($i % 2 -eq 0 ){ $out += $student_name[$i] } } $out 它应该打印输出如下 Cneune 您

我正在尝试使用powershell打印字符串结果中的奇数字符

下面的代码正在运行,但是否有其他简单的方法来执行此任务?喜欢使用分割函数吗

$student_name = "Consequences"
$out = ""
for($i = 0; $i -lt $student_name.Length ;$i++ ){
    if ($i % 2 -eq 0 ){
        $out += $student_name[$i]
    }
}
$out
它应该打印输出如下

Cneune

您可以使用单个foreach循环和字符串方法完成您要完成的任务:


我使用数组运算符@强制foreach将项目作为单个集合返回,以便-join可以工作。

您可以使用单个foreach循环和字符串方法完成您要完成的任务:


我使用数组运算符@强制foreach将项目作为单个集合返回,以便-join可以工作。

好的,我将给出一个正确的答案:

$out = (0..$student_name.length | ?{($_ % 2) -eq 0} | %{$student_name[$_]}) -join ''

这将获取从0到单词0..$student_name.length中的字符数的所有整数。然后它进行过滤,只保留奇数整数{$%2-eq 0}。它使用这些整数从字符串%{$student\u name[$\u]}中该位置的字符串中获取每个字符。最后,它将字符重新连接成一个字符串-连接。

好的,我会做一个正确的回答:

$out = (0..$student_name.length | ?{($_ % 2) -eq 0} | %{$student_name[$_]}) -join ''

这将获取从0到单词0..$student_name.length中的字符数的所有整数。然后它进行过滤,只保留奇数整数{$%2-eq 0}。它使用这些整数从字符串%{$student\u name[$\u]}中该位置的字符串中获取每个字符。最后,它将字符重新连接到一个字符串中-连接。

这里有一个基于Powershell中.NET Linq的解决方案,可能是最快的解决方案:检查索引器的第一位是否设置为确定奇数字符。从字符数组中删除零个字符并连接到字符串

$out = 'Consequences'
([Linq.Enumerable]::Select($out, [Func[char, int, char]] { param( $c, $i ) if( -not ($i -band 1) ) { $c } }) | ? {$_ -ne 0 }) -join ''

这里有一个基于Powershell中.NET Linq的解决方案,可能是最快的解决方案:检查索引器的第一位是否设置为确定奇数字符。从字符数组中删除零个字符并连接到字符串

$out = 'Consequences'
([Linq.Enumerable]::Select($out, [Func[char, int, char]] { param( $c, $i ) if( -not ($i -band 1) ) { $c } }) | ? {$_ -ne 0 }) -join ''

还有两个演示各种可用的技术。第一种方法使用一元形式的-join,利用语句可以返回值并按2计数的事实,而不是检查数字是否为偶数

$student_name = "Consequences"
-join @(for ($i = 0; $i -lt $student_name.Length; $i += 2) {
        $student_name[$i]
})
第二个解决方案与第一个类似,但使用foreach循环和$foreach枚举器而不是for循环


还有两个演示各种可用的技术。第一种方法使用一元形式的-join,利用语句可以返回值并按2计数的事实,而不是检查数字是否为偶数

$student_name = "Consequences"
-join @(for ($i = 0; $i -lt $student_name.Length; $i += 2) {
        $student_name[$i]
})
第二个解决方案与第一个类似,但使用foreach循环和$foreach枚举器而不是for循环


我的一个朋友提出了这个答案,尽管它的概念是一样的

$long_word = "Consequences"
-join ($long_word -split '(.{2})').ForEach({$_[0..0]})

我的一个朋友提出了这个答案,尽管它的概念是一样的

$long_word = "Consequences"
-join ($long_word -split '(.{2})').ForEach({$_[0..0]})

@EBGreen可以自由推荐CR上的OP帖子,但在将来,请不要使用代码审查作为结束问题的理由。评估请求并使用一个理由,比如过于宽泛,主要是基于意见的,等等。然后你可以向OP提到,如果是,它可以发布在代码审查上。请看你不应该做的部分,我总是忘记这一点。撤回投票。@EBGreen可以自由推荐CR上的OP帖子,但在将来,请不要使用代码审查作为结束问题的理由。评估请求并使用一个理由,比如过于宽泛,主要是基于意见的,等等。然后你可以向OP提到,如果是,它可以发布在代码审查上。请看你不应该做的部分,我总是忘记这一点。收回结束投票。-split.{2}这将在每2个字符处分割给定字符串。我们可以为任何数字拆分字符串。带有3个字符的拆分字符串示例$string-split.{3}-ne输出'abc''def'-split'。{2}'这将在每2个字符处分割给定字符串。我们可以为任何数字拆分字符串。带有3个字符的拆分字符串示例$string-split.{3}-ne输出'abc''def'