获取列表中每个字符串的第一个字符

get first char of each string in a list

我正在尝试获取列表中每个字符串的第一个字符。该列表包含:

hehee_one
hrhr_one
test_two

我正在使用 foreach 对象循环列表

ForEach-Object {($jsonRules.name[0])}

但这只是获取第一个元素,这是有道理的。如果我这样做:

ForEach-Object {($jsonRules.name[0][0])}

我只得到第一个元素的第一个字符,但没有得到其余的..

所以请帮助我.. 谢谢

Santiago Squarzon 在评论中提供了关键指针:

提供你想要的字符串ForEach-Object cmdlet to operate on via the pipeline, which allows you to refer to each via the automatic $_ variable(为简洁起见,以下使用数组文字作为输入):

PS> 'tom', 'dick', 'harry' | ForEach-Object { $_[0] }
t
d
h

或者,对于内存中已有的值,使用 .ForEach 数组 方法 以获得更好的性能:

('tom', 'dick', 'harry').ForEach({ $_[0] })

foreach语句提供最佳性能:

foreach ($str in ('tom', 'dick', 'harry')) { $str[0] }

至于你试过的

  • ForEach-Object { ... } - 没有管道输入 - 本质上与直接执行 ... 相同。

    • 因此,用上面的样本输入表示:

      • 你执行了:

        ForEach-Object { ('tom', 'dick', 'harry')[0][0] }
        
      • 等同于:

         ('tom', 'dick', 'harry')[0][0]
        
      • 因此从输入数组(第一个 [0])中提取 first 元素,然后将第二个 [0] 应用于只有那个字符串,因此只会产生 't'

  • 换句话说:使用 ForEach-Object 仅对来自管道的输入 有意义