PowerShell'deki Dizileri Karşılaştırın [4 Yol]


Bu yazıda PowerShell'de Dizilerin nasıl karşılaştırılacağını göreceğiz.

PowerShell, bir veya daha fazla boyuta ve her boyutta sıfır ila birçok öğeye sahip dizileri destekler. Bir boyutun içindeki öğeler, artan tam sayı düzeninde 0'dan itibaren numaralandırılır. Ayrıca dizi alt simge operatörü [] herhangi bir belirli öğeye erişime izin verir. PowerShell, dizileri karşılaştırmak için çeşitli şekillerde kullanılabilir. Aşağıda bunlardan birkaçını bulacaksınız.

Dize Dizilerini Karşılaştırın

Dize içeren iki diziniz varsa bunları PowerShell ile mümkün olan en basit yollardan biriyle karşılaştırabiliriz. Kendimizi bu durumda bulduğumuzda dizilerdeki stringleri birkaç farklı şekilde karşılaştırabiliriz; aşağıda dize dizilerini karşılaştırmak için birkaç yöntem verilmiştir.

  • Where-Object Cmdlet'ini in operatörüyle kullanma
  • Compare-Object Cmdlet'ini kullanma
  • -contains Operatörünü Kullanma
  • -in Operatörünü Kullanma

Where-Object Cmdlet'ini in operatörüyle kullanın

PowerShell'deki dizileri karşılaştırmak için Where-Object cmdlet'ini kullanın.

Where-Object Cmdlet'ini kullanın:

$array1 = "Monday", "Tuesday", "Wednesday", "Thursday"
$array2 = "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
$array1 | Where-Object -FilterScript { $_ -in $array2 }

ÇIKTI:

Wednesday
Thursday

PowerShell Where-Object cmdlet'inin tek amacı, yalnızca istediğiniz verilerin döndürülmesi için bir komutun çıktısını filtrelemekti. Komut dosyası bloğu anonim bir işlevdir. Bu nedenle, bir komut dosyası bloğunu filtre olarak kullanmak için -FilterScript parametresini kullanırsınız. Bu parametre, daha sonra FilterScript'e aktarılabilecek ve where- object cmdlet'inde gerçekleştirilebilecek bir komut dosyası bloğu yazmanıza olanak tanır.

-in operatörü, değerin bir koleksiyonda olduğu anlamına gelir ve bir eşleşme bulunursa özellik değerini döndürür. İşlem hattı değişkeni $_, PowerShell'de geçerli nesneyi temsil etmek için kullanılan belirli bir değişkendir. Böylece eşleşmenin bulunduğu her iki diziden de Wednesday ve Thursday çıktılarını aldık.

Compare-Object Cmdlet'ini kullanın

PowerShell'deki dizileri karşılaştırmak için Compare-Object cmdlet'ini kullanın. Compare-Object cmdlet'i iki nesne kümesini karşılaştırır. Bir nesne kümesi referans, diğer nesne kümesi ise farktır.**

Compare-Object Cmdlet'ini kullanın:

$array1 = "Monday", "Tuesday", "Wednesday", "Thursday"
$array2 = "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
Compare-Object -ReferenceObject $array1 -DifferenceObject $array2

ÇIKTI:

InputObject SideIndicator
----------- -------------
Friday      =>
Saturday    =>
Sunday      =>
Monday      <=
Tuesday     <=

Belirtilen dizileri karşılaştırmak için PowerShell'deki Compare-Object cmdlet'ini kullandık. Bir -ReferenceObject ve bir DifferenceObject kullanarak bu cmdlet, her dizide hangi öğelerin mevcut olduğunu ve hangilerinin olmadığını belirleyebilir. =>, SideIndicator özelliğidir ve döndürülen InputObject özelliğinin < yerine DifferenceObject değerinde olduğunu belirtir.ReferenceObject değeri, <= ise bunun tersi anlamına gelir.

-İçerir Operatörünü kullanın

Belirtilen dizenin PowerShell'deki diğer dizinin parçası olup olmadığını kontrol etmek için -Contains operatörünü kullanın.

-İşleci içerir: kullanın:

$array = @('potato', 'onion', 'peas', 'carrot')
$array -contains 'onion'

ÇIKTI:

True

PowerShell'in -Contains operatörü, bir öğenin bir koleksiyonun parçası olup olmadığını belirlemenize olanak tanır. -Contains operatörü varsayılan olarak koleksiyonları anlamasa da, istediğinizi gerçekleştirmesini sağlayacak kod yazabilirsiniz. PowerShell bu operatörü bir dizideki tek bir öğeyi kontrol etmek için kullanabilir. Dizide mevcutsa True değerini döndürür; aksi takdirde False değerini döndürür.

Her iki dizinin komut dizelerini kontrol etmek için iki dizi oluşturalım.

-İşleci içerir: kullanın:

$array1 = @('potato', 'onion', 'carrot')
$array2 = @('peas', 'cauliflower', 'potato')
$array1 | ForEach-Object {
    if ($array2 -contains $_) {
        Write-Host "<code>$array2 has the </code>$array1 string [$_]"
    }
}

ÇIKTI:

$array2 has the $array1 string [potato]

ForEach-Object cmdlet'i, giriş nesneleri koleksiyonundaki her öğe üzerinde çalışır. Giriş nesneleri ayrıca cmdlet'e aktarılabilir veya InputObject parametresi kullanılarak belirtilebilir. Bunu dizi1 üzerinde yineleme yapmak için kullandık. array2'nin de bu öğeye sahip olup olmadığını kontrol etmek için her yinelemede if ifadesini -contains operatörüyle birlikte kullandık. Eğer öyleyse, yukarıda gösterildiği gibi özelleştirilmiş çıktıyı yazdırmak için Write-Host cmdlet'ini kullandık.

ForEach-Object ile -in Operatörünü kullanın

Belirtilen dizenin PowerShell'deki diğer dizinin parçası olup olmadığını kontrol etmek için -in operatörünü kullanın.

-in Operatörünü kullanın:

$array1 = @('potato', 'onion', 'carrot')
$array2 = @('peas', 'cauliflower', 'potato')
$array1 | ForEach-Object {
    if ($_ -in $array2) {
        Write-Host "<code>$array2 has the </code>$array1 string [$_]"
    }
}

ÇIKTI:

$array2 has the $array1 string [potato]

Bu kod önceki örneğe benzer ancak bu kod için -contains operatörüne eşdeğer olan ancak tam tersi sözdizimine sahip olan -in operatörünü kullanır. -contains operatörü kullanıldığında dizi sol tarafta tanımlanıyordu. Bu sefer dizi yukarıda görüldüğü gibi sağ tarafta -in operatörü kullanılarak belirtiliyor.

Özel nesne dizilerini karşılaştırın

Bir dizi özel nesneyi karşılaştırmak için Compare-Object'i kullanın. Compare-Object cmdlet'i iki nesne kümesini karşılaştırır. Bir nesne kümesi referanstır, diğer nesne kümesi ise farktır.

Where-Object Cmdlet'ini kullanın:

$ArrayObject1 = @(
[PSCustomObject]@{Name = "John"; Age = 30},
[PSCustomObject]@{Name = "Martin"; Age = 25}
)

$ArrayObject2 = @(
[PSCustomObject]@{Name = "John"; Age = 30},
[PSCustomObject]@{Name = "Sam"; Age = 40}
)

Compare-Object -ReferenceObject $ArrayObject1 -DifferenceObject $ArrayObject2 -Property Name, Age

ÇIKTI:

Name Age SideIndicator
---- --- -------------
Name   Age SideIndicator
----   --- -------------
Sam     40 =>
Martin  25 <=

Yukarıdaki kod size iki dizi arasındaki farkı sağlayacaktır.
<=, öğenin yalnızca ReferenceObject'de mevcut olup olmadığını belirtir>
=> öğenin yalnızca DifferenceObject'te mevcut olup olmadığını belirtir

Bunların hepsi PowerShell'deki Dizilerin nasıl karşılaştırılacağıyla ilgilidir.

İlgili makaleler