我正在编写一个脚本,我必须从字符串中读取交替的字符。
我使用以下方法:
$s = "abcdef"
$chars = $s.ToCharArray()
For( $i = 0; $i -lt $chars.Count; $i = $i + 2){
$chars[$i]
}
是否有更简单的方法,尤其是基于管道的方法?
答案 0 :(得分:5)
您可以使用简单的正则表达式(demo)匹配两个字符并将其替换为第一个字符:
$s -replace '(.).', '$1'
输出:
ace
如果您想拥有角色,只需将其投放到char[]
:
[char[]] ($s -replace '(.).', '$1')
或拆分字符串(感谢PetSerAl):
$s -replace '(.).', '$1' -split '(?!^|$)'
答案 1 :(得分:3)
喜欢正则表达式的答案,但希望包含更多使用管道的内容和Select-Object
$string = "abcdef"
[char[]]$string | Select-Object -Index (0..($string.Length-1) | Where-Object{$_ % 2})
-Index
获取字符串的长度并返回用于从char数组中提取字符的奇数数组。使用!($_ % 2)
将交替返回的集合。在这两种情况下,我都在利用模数运算符返回的值。如果在上面的例子中数字是偶数,则返回0,其值为false。 $_ % 2 -eq $false
将完成同样的事情并且更具可读性。
答案 2 :(得分:3)
另一种可能性:
Dim totalAges As Integer = 0
For i As Integer = 0 To intAge.Count - 1
totalAges += intAge(i)
Next
averageAge = totalAges / intAge.Count 'averageAge = 43.6
答案 3 :(得分:2)
不确定它是否更简单,但它有所不同:
$s = "abcdef"
for ($i = 0; $i -lt $s.Length; $i++)
{
if ($i % 2 -ne 0)
{
$s[$i]
}
}