比较 PowerShell 数组中的对象

5

我已经搜索过了,但是只能找到PowerShell中比较两个不同数组的帖子。我想做的是比较单个数组内部的内容,以查看其中是否所有内容都相等(例如:2,2,2,2 = true; 2,2,2,3 = false)。 有人有任何想法可以完成这个任务吗? 谢谢。

3个回答

8

您可以使用 Get-Unique 命令。

$array = @(2, 2, 2, 2)

if (($array | Get-Unique).Count -gt 1) {
    Write-Host "some odd ones"
} else {
    Write-Host "all the same"
}

这将计算数组中存在多少个唯一的项

我们将结果传递给if语句进行评估

如果来自Get-Unique的唯一结果超过一个,我们知道所有元素不相等

请查看SS64页面


谢谢 - 那帮了我大忙。最简单而优雅的解决方案。 - Ashok Jingar

1
你可以尝试像这样做,通过迭代元素并将其与最后一个进行比较,以确保它们都相等。
你可以将这个逻辑制作成一个函数,接受一个数组作为参数,并返回$true$false,以便重复使用。如果发现有不相等的内容,你还可以通过跳出循环来进一步优化代码。
$arr = (2,2,2,3)

$notEqual = $false;

for ($i = 1; $i -lt $arr.Length; $i++)
{
  if ($arr[$i] -ne $arr[$i-1]) {$notEqual = $true}
}

if ($notEqual)
{
    Write-Host "Array elements not equal"
}
else
{
    Write-Host "Array members are qual"
}

1

另一种方法是创建一个哈希表。Group-Object 可以为您完成此工作。如果最终有多个条目,则它们并不都相等。然后,您可以通过提取哈希表键来查看所有唯一值。

$array = 2,2,2,2,3,2,3,2

$grouped = $array | Group-Object -AsHashTable

if($grouped.count -gt 1){
    Write-Host All array elements are not equal -ForegroundColor Yellow

    Write-Host Unique values $grouped.keys
}
else {
    Write-Host All array elements are equal -ForegroundColor Green
}

enter image description here

$array = 2,2,2,2,2,2

$grouped = $array | Group-Object -AsHashTable

if($grouped.count -gt 1){
    Write-Host All array elements are not equal -ForegroundColor Yellow

    Write-Host Unique values $grouped.keys
}
else {
    Write-Host All array elements are equal -ForegroundColor Green
}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接