好吧,伙计们。另一个我不完全确定是可能的。我环顾四周,没有看到任何有效的东西(或者如果我有,我没有意识到)。
基本上,我有两个阵列......
$x = @(a,d,b,c)
$y = @(alice,bob,chuck,dave)
...前者是预先填充的,后者是由用户输入生成的;它们的长度总是相同的。
我想基本上做foreach ($x in $x) {echo "$x is assigned to $y")
结果如下:
a被分配给alice
d被分配给bob
b被分配给chuck
c被分配给dave
问题在于,如果可能的话,我不知道如何去做。虽然我的脚本不是100%必需的,但它会大大缩短我必须编写的内容,并允许扩展脚本的参数。
提前致谢。
编辑: 选择的答案已被选中,因为虽然其他答案大致相同,但它更易读,使用起来更舒服
答案 0 :(得分:0)
使用普通的for
循环代替foreach
,如此,
$x = @('a','d','b','c')
$y = @('alice','bob','chuck','dave')
if($x.Length -ne $y.Length) {
# TODO: What to do if user input is missing assignees?
} else {
for($i=0;$i -ne $x.Length; ++$i) { "{0} -> {1}" -f $x[$i], $y[$i] }
}
Output
a -> alice
d -> bob
b -> chuck
c -> dave
答案 1 :(得分:0)
在一行代码中有两种方法可以做到这一点。 所以考虑一下你的代码:
$x = @("a","d","b","c");
$y = @("alice","bob","chuck","dave");
如果$ x中的项目都是不同的,则此方法有效:
$x | ForEach-Object { "$_ is assigned to $($y[$x.IndexOf($_)])" };
您还可以将ForEach-Object缩短为百分之一。他们的意思相同:
$x | % { "$_ is assigned to $($y[$x.IndexOf($_)])" };
如果您的项目不明显(或者您只是想避免无理由索引),则可以添加另一个块来初始化索引器变量,如下所示:
$x | % { $i = 0 } { "$_ is assigned to $($y[$i])"; ++$i };
认为这个主题很有意思,所以也放了一个帖子:
https://tangodude.wordpress.com/2014/02/13/powershell-different-ways-of-looping-indexing/
答案 2 :(得分:0)
最短的我能得到它是:
$i = 0; $x | % { "$_ is assigned to $($y[$i++])"}