9. diziler
9,1 giriş
PowerShell, her boyuttaki sıfır veya daha fazla öğeye sahip bir veya daha fazla boyutun dizilerini destekler. Bir boyut içinde öğeler, sıfırdan başlayan artan tamsayı sırasında numaralandırılır.
Her bir öğeye dizi alt simge işleci []
(§ 7.1.4) aracılığıyla erişilebilir. Bir dizideki boyutların sayısına derecesi denir.
Bir öğesi, bir dizi türü dahil olmak üzere herhangi bir türde bir değer içerebilir. Değerleri herhangi bir dizi türünde olan bir veya daha fazla öğeye sahip bir dizi pürüzlü dizi olarak adlandırılır. Çok boyutlu bir dizide birden çok boyut bulunur, bu durumda bir boyutun her satırındaki öğelerin sayısı aynıdır. Pürüzlü bir dizinin bir öğesi çok boyutlu bir dizi içerebilir ve tam tersi de geçerlidir.
Çok boyutlu diziler satır birincil sırada depolanır. Bir dizideki öğelerin sayısı, dizi oluşturulduğunda düzeltilen dizinin uzunluğu olarak adlandırılır. Bu nedenle, 1 boyutlu bir dizide bulunan öğelerin uzunluğu N , ifadeler A[0], A[1], ..., A[N-1]
kullanılarak erişilebilir (yani, alt indislenmiş). 2 boyutlu bir dizide bulunan ve M satırları bulunan, her satır N sütun içeren öğelere, ifadeler B[0,0], B[0,1], ..., B[0,N-1], B[1,0], B[1,1], ..., B[1,N-1], ..., B[M-1,0], B[M-1,1], ..., B[M-1,N-1]
kullanılarak erişilebilir.
Üç veya daha fazla boyut içeren diziler için de.
Varsayılan olarak, bir dizi çok biçimli olur; Yani, öğeleri aynı türde olmalıdır. Örneğin,
$items = 10,"blue",12.54e3,16.30D # 1-D array of length 4
$items[1] = -2.345
$items[2] = "green"
$a = New-Object 'object[,]' 2,2 # 2-D array of length 4
$a[0,0] = 10
$a[0,1] = $false
$a[1,0] = "red"
$a[1,1] = $null
1 boyutlu bir dizide tür type[]
vardır, 2 boyutlu type[,]
bir dizide tür vardır, 3 boyutlu bir dizide type[,,]
tür ve bu şekilde devam eder. burada tür , kısıtlanmış olmayan bir tür dizisi için nesne veya kısıtlanmış bir dizi için kısıtlanmış tür (§ 9,4).
Tüm dizi türleri tür dizisinden türetilir (§ 4.3.2).
9,2 dizisi oluşturma
Bir dizi, Şu formlara sahip bir dizi oluşturma ifadesi ile oluşturulur: birli virgül işleci (§ 7.2.1),dizi ifadesi (§ 7.1.7), ikili virgül işleci (§ 7,3), Range işleci (§ 7,4) veya New-Object cmdlet 'i.
Dizi oluşturma ve kullanım için bazı örnekler şunlardır:
$values = 10, 20, 30
for ($i = 0; $i -lt $values.Length; ++$i) {
"`$values[$i] = $($values[$i])"
}
$x = , 10 # x refers to an array of length 1
$x = @(10) # x refers to an array of length 1
$x = @() # x refers to an array of length 0
$a = New-Object 'object[,]' 2, 2 # create a 2x2 array of anything
$a[0, 0] = 10 # set to an int value
$a[0, 1] = $false # set to a boolean value
$a[1, 0] = "red" # set to a string value
$a[1, 1] = 10.50D # set to a decimal value
foreach ($e in $a) { # enumerate over the whole array
$e
}
Aşağıdaki işlem hattına yazılır:
$values[0] = 10
$values[1] = 20
$values[2] = 30
10
False
red
10.50
Açıkça başlatılmamış herhangi bir öğenin varsayılan başlangıç değeri, bu öğenin türü için varsayılan değerdir ( $false
Yani, sıfır veya $null
).
9,3 diziyi birleştirme
Rastgele tür ve uzunluğun dizileri, ve +=
işleçleri ile +
birleştirilebilir, her ikisi de yeni bir kısıtlanmış olmayan 1 boyutlu dizi oluşturulmasına neden olur. Varolan diziler değiştirilmez. Daha fazla bilgi için bkz. § 7.7.3 ve kısıtlanmış tür dizisine ekleme hakkında bir tartışma için § 9,4 .
9,4 kısıtlayan öğe türleri
Bir dizi türü cast ile dizi oluşturma ifadesine önek ekleyerek tür sınırlamalı olması için 1 boyutlu bir dizi oluşturulabilir. Örneğin,
$a = [int[]](1,2,3,4) # constrained to int
$a[1] = "abc" # implementation-defined behavior
$a += 1.23 # new array is unconstrained
Çok boyutlu bir dizi oluşturmak için sözdizimi bir türün belirtimini gerektirir ve bu tür bu dizi için kısıtlama türü olur. Ancak, tür object[]
belirterek gerçekten hiçbir tür değeri bu türdeki bir dizinin bir öğesine atanabilir.
İki diziyi (§ 7.7.3) birleştirerek her zaman, her iki dizi de aynı türde kısıtlanmış olsa bile, kısıtlanmış olmayan yeni bir dizi oluşur. Örneğin,
$a = [int[]](1,2,3) # constrained to int
$b = [int[]](10,20) # constrained to int
$c = $a + $b # constraint not preserved
$c = [int[]]($a + $b) # result explicitly constrained to int
başvuru türü olarak 9,5 dizileri
Dizi türleri başvuru türlerdir, bir diziyi belirlemek bir dizi sıralama, uzunluk ve öğe türünün herhangi bir dizisine başvuracak şekilde yapılabilir. Örneğin,
$a = 10,20 # $a refers to an array of length 2
$a = 10,20,30 # $a refers to a different array, of length 3
$a = "red",10.6 # $a refers to a different array, of length 2
$a = New-Object 'int[,]' 2,3 # $a refers to an array of rank 2
Bir dizinin atanması basit bir kopyalama içerir; diğer bir deyişle, atanan değişkeni aynı diziyi ifade eder, dizinin bir kopyası yapılmaz. Örneğin,
$a = 10,20,30
">$a<"
$b = $a # make $b refer to the same array as $a
">$b<"
$a[0] = 6 # change value of [0] via $a
">$a<"
">$b<" # change is reflected in $b
$b += 40 # make $b refer to a new array
$a[0] = 8 # change value of [0] via $a
">$a<"
">$b<" # change is not reflected in $b
Aşağıdaki işlem hattına yazılır:
>10 20 30<
>10 20 30<
>6 20 30<
>6 20 30<
>8 20 30<
>6 20 30 40<
dizi öğeleri olarak 9,6 dizileri
Bir dizinin herhangi bir öğesi, bir dizi olabilir. Örneğin,
$colors = "red", "blue", "green"
$list = $colors, (,7), (1.2, "yes") # parens in (,7) are redundant; they
# are intended to aid readability
"`$list refers to an array of length $($list.Length)"
">$($list[1][0])<"
">$($list[2][1])<"
Aşağıdaki işlem hattına yazılır:
$list refers to an array of length 3
>7<
>yes<
$list[1]
gösterildiği gibi, üzerinden $list[1][0]
erişilen 1 öğeli bir Array öğesine başvurur. Bunu aşağıdaki güvenle farklı bir durum ile karşılaştırın:
$list = $colors, 7, (1.2, "yes") # 7 has no prefix comma
">$($list[1])<"
$list[1]
Burada, ile $list[1]
erişilen, bir skaler ve tamsayı anlamına gelir.
Aşağıdaki örneği göz önünde bulundurun
$x = [string[]]("red","green")
$y = 12.5, $true, "blue"
$a = New-Object 'object[,]' 2,2
$a[0,0] = $x # element is an array of 2 strings
$a[0,1] = 20 # element is an int
$a[1,0] = $y # element is an array of 3 objects
$a[1,1] = [int[]](92,93) # element is an array of 2 ints
9,7 negatif alt simge
Bu, § 7.1.4.1içinde ele alınmıştır.
9,8 sınır denetimi
Bu, § 7.1.4.1içinde ele alınmıştır.
9,9 dizi dilimleri
Dizi dilimi , öğeleri bir koleksiyondan sıfır veya daha fazla öğenin kopyası olan kısıtlanmamış bir 1 boyutlu dizidir. Bir dizi dilimi, alt simge işleci []
(§ 7.1.4.5) ile oluşturulur.
9,10 bir diziyi kopyalama
Ardışık bir öğe kümesi, yöntemi [Array]::Copy
kullanılarak bir diziden diğerine kopyalanabilir. Örneğin,
$a = [int[]](10,20,30)
$b = [int[]](0,1,2,3,4,5)
[Array]::Copy($a, $b, 2) # $a[0]->$b[0],
$a[1]->$b[1]
[Array]::Copy($a, 1, $b, 3, 2) # $a[1]->$b[3],
$a[2]->$b[4]
dizi üzerinde numaralandırma 9,11
Alt simge işleci aracılığıyla öğelerinin her birine erişen bir dizi aracılığıyla döngü uygulamak mümkün olsa da, Foreach ifadesini kullanarak bu dizinin öğelerinin üzerinde listeleme yapabiliriz. Çok boyutlu bir dizi için öğeler satır birincil sırada işlenir. Örneğin,
$a = 10, 53, 16, -43
foreach ($elem in $a) {
# do something with element via $e
}
foreach ($elem in -5..5) {
# do something with element via $e
}
$a = New-Object 'int[,]' 3, 2
foreach ($elem in $a) {
# do something with element via $e
}
9,12 çok boyutlu dizi düzleştirme
Çok boyutlu bir dizideki bazı işlemler (örneğin, çoğaltma (§ 7.6.3) ve birleştirme (§ 7.7.3)), bu dizinin düzleştirilmesi gerektirir; diğer bir deyişle, kısıtlanmış olmayan bir türdeki 1 boyutlu bir diziye açılması için. Sonuçta elde edilen dizi tüm öğeleri satır-birincil sırada alır.
Aşağıdaki örneği inceleyin:
$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
Tarafından $c
belirlenen dizi, "Red", $true
, 10, 20, 30 ve 40 öğelerini içerir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin