将一个数组的值与第二个数组的值进行比较,并基于此将一个数组的值放入第三个数组

Compare values from one array with the values from 2nd array and based on that place the values from one array into 3rd array

我有这两个数组。数组 1 中的值顺序正确。数组 2 中的值顺序不正确。我需要做的是遍历两个数组并对 IP 进行排序,以便相同的 IP 位于数组 2 中的相同索引中。

  1. 我正在尝试嵌套循环。

  2. 我正在尝试下面的嵌套循环,但没有成功。

  3. 我也尝试过嵌套 ForEach,但我没有得到横截面,而是得到了所有东西。

  4. 我已经检查了 compare-object cmdlet,但它在这种情况下似乎没有用。

  5. 有什么想法吗?

$arrayOfItemsToCompare | ForEach对象{ 如果($array -包含 $){ 写主机 $ } }

Array 1:

192.168.3.1
192.168.1.1
10.49.50.254
0.0.0.0
90.183.197.126
194.228.115.69
90.182.79.231
90.182.78.193
194.228.115.67
194.228.115.66
194.228.190.115
194.228.92.85
172.253.50.253
108.170.238.231
216.58.201.68

Array 2:



DestinationIP   AverageLatency Success
    -------------   -------------- -------
    192.168.3.1                  0     100
    192.168.1.1                  0     100
    194.228.115.69            16.4     100
    90.183.197.126              17     100
    90.182.78.193             16.8     100
    194.228.115.67            16.8     100
    194.228.115.66            17.4     100
    194.228.190.115           17.8     100
    172.253.50.253            17.8     100
    194.228.92.85             18.4     100
    108.170.238.231             18     100
    216.58.201.68             17.6     100
    10.49.50.254                 0       0
    90.182.79.231                0       0

根据第一个数组的顺序对第二个 对象数组 进行排序的一种方法是构造一个表达式数组。

由于这可能有点难以理解,让我们用一个简单的例子来更好地理解这一点。给定我们的示例数组 1, 2, 3 假设我们要按 3, 1, 2 的顺序对其进行排序。为此,我们可以使用 Sort-Object 的多个表达式, 表达式 是脚本块,它们将确定条件 $true 的位置并根据该顺序对结果进行排序:

PS /> 1, 2, 3 | Sort-Object { $_ -eq 3 }, { $_ -eq 1 }, { $_ -eq 2 } -Descending

3
1
2

使用相同的逻辑,这是对第二个数组进行排序的方法。下面假设 $sortArray 是包含 IP 列表的变量,$arrayOfObjects 是包含 IP 数组的变量我们需要根据第一个变量的顺序排序的对象:

# ASSUMING THE ARRAY OF IPs is stored here
$sortArray = @(...)

# Store all the expressions in a variable
$expressions = foreach($i in $sortArray) {
    { $_.DestinationIP -eq $i }.GetNewClosure()
}

$arrayOfObjects | Sort-Object $expressions -Descending

另一种方法是使用 Group-Object -AsHashtable 根据 $arrayOfObjectsDestinationIP 值创建查找 table,然后循环遍历$sortArray 筛选对象:

$map = $arrayOfObjects | Group-Object DestinationIP -AsHashTable
foreach($obj in $sortArray) {
    if($value = $map[$obj]) {
        $value
    }
}

两个片段的输出应如下所示:

DestinationIP   AverageLatency Success
-------------   -------------- -------
192.168.3.1     0              100
192.168.1.1     0              100
10.49.50.254    0              0
90.183.197.126  17             100
194.228.115.69  16.4           100
90.182.79.231   0              0
90.182.78.193   16.8           100
194.228.115.67  16.8           100
194.228.115.66  17.4           100
194.228.190.115 17.8           100
194.228.92.85   18.4           100
172.253.50.253  17.8           100
108.170.238.231 18             100
216.58.201.68   17.6           100