我有两个数据阵列:
$arrnames=('a','b','c')
$arrtypes=('x','y','z')
我有一个查找数组:
$arrlookup=('y','z')
我需要返回$arrnames
中{$ 1}}中包含$ arrtypes中匹配元素的元素。我一直在玩$arrlookup
循环foreach
并通过索引查看$arrnames
中的相同元素,但它变得草率,我知道必须有更好的方法。
我已经看到了一些类似的问题,但没有任何让我特别回答这个问题的事情。作为一个Powershell非常新手,我还在学习如何根据我的需求调整示例。非常感谢任何帮助。
我的代码(应用于上述示例的技术 - 实际代码使用从XML文件派生的复杂数组,并且具有大量调试代码,因此复制/粘贴是不切实际的)
$arrtypes
有没有办法使用对象方法,过滤和管道来简单地提取没有foreach循环的元素
编辑 - 这是创建实际数组的实际代码 - $ builds是一个XML文档:
foreach ($a in $arrnames) {
$t=$arrtypes[$arrnames.IndexOf($a)]
if ($arrlookup.Contains($t)) {
$arrresult+=$a
}
)
查找表已知:
$names=$builds.builds.project.name
$types=$builds.builds.project.type
我也可以控制XML文件,但是我没有看到任何方法来简化它,而不是实现哈希表代码,但是使用上面的数组。
答案 0 :(得分:1)
我认为你需要改变你的输入才能在这里做任何不同的事情。您要求的是$arrnames
和$arrtypes
真正的哈希表。这样您就可以使用键访问值。
目前我会这样做来创建哈希表。第二个循环显示如何返回每个匹配值。
$hash = @{}
for($index = 0; $index -lt $arrtypes.Count; $index++){
$hash.($arrtypes[$index]) = $arrnames[$index]
}
$arrresult = $arrlookup | ForEach-Object{
$hash[$_]
}
这将返回
b
c
如果您可以获得创建该哈希表的输入,那么它将减少重建它的需要。此外,如果您事先知道查找,那么您可以过滤它,然后只需要您想要的输出。