繁体   English   中英

比较单个 PowerShell 阵列中的对象

[英]Compare Objects In Single PowerShell Array

我已经搜索过,但我只能找到比较 PowerShell 中两个不同的 arrays 的帖子。 我要做的是比较单个数组中的内容,看看里面的所有内容是否相等(例如;2、2、2、2 = true;2、2、2、3 = false)。 有谁知道如何实现这一点? 谢谢。

您可以使用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页面

您可以尝试类似这样的方法,它遍历元素并将其与最后一个进行比较以确保它们都相等。

您可以使用此逻辑制作 function,该逻辑将数组作为参数并返回$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"
}

另一种方法可能是制作一个哈希表。 Group-Object可以为您完成工作。 如果最终有多个条目,那么它们并不都是相等的。 然后,您可以通过拉动 hash 表键来查看所有唯一值。

$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
}

在此处输入图像描述

$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
}

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM