Diziler (F#)
Diziler, sabit boyutludur, sıfır tabanlıdır ve tümü aynı türde olan ardışık veri öğelerinin kesilebilir koleksiyonlarıdır.
Diziler Oluşturma
Dizileri çeşitli yollarla oluşturabilirsiniz.Ardışık değerleri listeleyerek [| ve |] arasında küçük bir dizi oluşturabilirsiniz; aşağıdaki örneklerde gösterildiği gibi noktalı virgülle ayrılmışlardır.
let array1 = [| 1; 2; 3 |]
Her öğeyi ayrı satıra koyabilirsiniz bu durumda noktalı virgül isteğe bağlıdır.
let array1 =
[|
1
2
3
|]
Dizi öğelerinin türü kullanılan değişmez değerlerden algılanır ve tutarlı olması gerekir.Aşağıdaki kod, 1.0 kayan noktalı, 2 ve 3 ise tamsayı olduğundan, hataya neden olur.
// Causes an error.
// let array2 = [| 1.0; 2; 3 |]
Dizi ifadelerini dizi oluşturmak için de kullanabilirsiniz.Aşağıda 1'den 10'a tamsayılar kareler dizisi oluşturan bir örnek verilmiştir.
let array3 = [| for i in 1 .. 10 -> i * i |]
İçindeki tüm öğelerin sıfırlandığı bir dizi oluşturmak için, Array.zeroCreate kullanın.
let arrayOfTenZeroes : int array = Array.zeroCreate 10
Öğelere Erişme
Dizi öğelerine nokta işleci (.) ve köşeli ayraçlar kullanarak erişebilirsiniz ([ ve ]).
array1.[0]
Dizi dizinleri 0'da başlar.
Dizide bir alt aralık belirtmenizi sağlayan dilim gösterimini kullanarak da dizi öğelerine erişebilirsiniz.Dilim gösterimi izleme örnekleri.
// Accesses elements from 0 to 2.
array1.[0..2]
// Accesses elements from the beginning of the array to 2.
array1.[..2]
// Accesses elements from 2 to the end of the array.
array1.[2..]
Dilim gösterimi kullanıldığında dizinin yeni bir kopyası oluşturulur.
Dizi Türleri ve Modüller
Tüm F# dizilerinin türü .NET Framework türüdür (Array).Bu nedenle, F# dizileri kullanılabilir tüm Array işlevlerini destekler.
Kitaplık modülü Microsoft.FSharp.Collections.Array, tek boyutlu dizilerdeki işlemleri destekler.Array2D, Array3D ve Array4D modülleri, sırasıyla iki, üç ve dört boyutlu dizilerde işlemleri destekleyen işlevler içerir.Array kullanarak dörtten büyüm derece dizileri oluşturabilirsiniz.
Basit İşlevler
Array.get bir öğeyi alır.Array.length dizinin uzunluğunu verir.Array.set bir öğeyi belirtilen değere ayarlar.Aşağıdaki kod örneği bu işlevlerin kullanımını gösterir.
let array1 = Array.create 10 ""
for i in 0 .. array1.Length - 1 do
Array.set array1 i (i.ToString())
for i in 0 .. array1.Length - 1 do
printf "%s " (Array.get array1 i)
Çıktı aşağıdaki gibidir.
0 1 2 3 4 5 6 7 8 9
Diziler Oluşturan İşlevler
Çeşitli işlevler, varolan bir diziye gereksinim duymadan dizileri oluşturur.Array.empty hiçbir öğe içermeyen yeni bir dizi oluşturur.Array.create belirli bir boyutun dizisini oluşturur ve sağlanan değerler için tüm öğeleri ayarlar.Array.init öğeler oluşturmak için bir işlev ve boyut verilen bir dizi oluşturur.Array.zeroCreate, dizi türü için sıfır değerine tüm öğelerin başlatıldığı bir dizi oluşturur.Aşağıdaki kod bu işlevleri gösterir.
let myEmptyArray = Array.empty
printfn "Length of empty array: %d" myEmptyArray.Length
printfn "Array of floats set to 5.0: %A" (Array.create 10 5.0)
printfn "Array of squares: %A" (Array.init 10 (fun index -> index * index))
let (myZeroArray : float array) = Array.zeroCreate 10
Çıktı aşağıdaki gibidir.
Length of empty array: 0
Area of floats set to 5.0: [|5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0; 5.0|]
Array of squares: [|0; 1; 4; 9; 16; 25; 36; 49; 64; 81|]
Array.copy mevcut bir diziden kopyalanan öğeleri içeren yeni bir dizi oluşturur.Kopya öğesinin, eğe türü başvuru türü ise, yalnızca başvurunun kopyalandığı alttaki nesnenin kopyalanmadığı anlamına gelen, sığ bir kopya olduğunu unutmayın.Aşağıdaki kod örneği bunu gösterir.
open System.Text
let firstArray : StringBuilder array = Array.init 3 (fun index -> new StringBuilder(""))
let secondArray = Array.copy firstArray
// Reset an element of the first array to a new value.
firstArray.[0] <- new StringBuilder("Test1")
// Change an element of the first array.
firstArray.[1].Insert(0, "Test2") |> ignore
printfn "%A" firstArray
printfn "%A" secondArray
Önceki kodun çıktısı aşağıdaki gibidir:
[|Test1; Test2; |]
[|; Test2; |]
Test1 dizesi yalnızca ilk dizide görünür, çünkü yeni bir öğe oluşturma işlemi yapıldığında firstArray içindeki başvurunun üzerine yazılır; ancak bu, secondArray içinde hâlâ bulunan boş bir dizeye yapılan özgün başvuruyu etkilemez.Test2 dizesi her iki dizide görünür, çünkü StringBuilder türünde yapılan Insert işlemi, her iki dizide başvurulan temel StringBuilder nesnesini etkiler.
Array.sub bir dizinin alt aralığından yeni bir dizi oluşturur.Başlangıç dizinini ve uzunluğu sağlayarak alt aralığı belirtirsiniz.Aşağıdaki kod Array.sub öğesinin kullanımını gösterir.
let a1 = [| 0 .. 99 |]
let a2 = Array.sub a1 5 10
printfn "%A" a2
Çıktı, alt dizenin 5 öğesinde başladığını ve 10 öğe içerdiğini gösterir.
[|5; 6; 7; 8; 9; 10; 11; 12; 13; 14|]
Array.append mevcut iki diziyi birleştirerek yeni bir dizi oluşturur.
Aşağıdaki kod Array.append öğesini gösterir.
printfn "%A" (Array.append [| 1; 2; 3|] [| 4; 5; 6|])
Önceki kodun çıktısı aşağıdaki gibidir.
[|1; 2; 3; 4; 5; 6|]
Array.choose yeni bir diziye dahil edilecek dizi öğeleri seçer.Aşağıdaki kod Array.choose öğesini gösterir.Dizi öğesi türünün, seçenek türünde döndürülen değer türüyle eşleşmesi gerekmediğini unutmayın.Bu örnekte, öğe türü olan int ve seçenek kayan noktalı sayı olarak bir polinom işlevinin elem*elem - 1 sonucudur.
printfn "%A" (Array.choose (fun elem -> if elem % 2 = 0 then
Some(float (elem*elem - 1))
else
None) [| 1 .. 10 |])
Önceki kodun çıktısı aşağıdaki gibidir.
[|3.0; 15.0; 35.0; 63.0; 99.0|]
Array.collect mevcut dizinin her bir dizi öğesinde belirli bir işlevi çalıştırır ve ardından işlev tarafından oluşturulan öğeleri toplar ve bunları yeni bir dizide birleştirir.Aşağıdaki kod Array.collect öğesini gösterir.
printfn "%A" (Array.collect (fun elem -> [| 0 .. elem |]) [| 1; 5; 10|])
Önceki kodun çıktısı aşağıdaki gibidir.
[|0; 1; 0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10|]
Array.concat dizi sırası alır ve bunları tek bir dizide birleştirir.Aşağıdaki kod Array.concat öğesini gösterir.
let multiplicationTable max = seq { for i in 1 .. max -> [| for j in 1 .. max -> (i, j, i*j) |] }
printfn "%A" (Array.concat (multiplicationTable 3))
Önceki kodun çıktısı aşağıdaki gibidir.
[|(1, 1, 1); (1, 2, 2); (1, 3, 3); (2, 1, 2); (2, 2, 4); (2, 3, 6); (3, 1, 3);
(3, 2, 6); (3, 3, 9)|]
Array.filter Boole koşulu işlevini alır ve koşulun true olduğu girdi dizisinden yalnızca bu öğeleri içeren yeni bir dizi oluşturur.Aşağıdaki kod Array.filter öğesini gösterir.
printfn "%A" (Array.filter (fun elem -> elem % 2 = 0) [| 1 .. 10|])
Önceki kodun çıktısı aşağıdaki gibidir.
[|2; 4; 6; 8; 10|]
Array.rev mevcut dizinin sırasını tersine çevirerek yeni bir dizi oluşturur.Aşağıdaki kod Array.rev öğesini gösterir.
let stringReverse (s: string) =
System.String(Array.rev (s.ToCharArray()))
printfn "%A" (stringReverse("!dlrow olleH"))
Önceki kodun çıktısı aşağıdaki gibidir.
"Hello world!"
Ardışık düzen işlecini (|>) aşağıdaki örnekte gösterildiği gibi kullanarak dizileri dönüştüren dizi modülündeki işlevleri kolayca birleştirebilirsiniz.
[| 1 .. 10 |]
|> Array.filter (fun elem -> elem % 2 = 0)
|> Array.choose (fun elem -> if (elem <> 8) then Some(elem*elem) else None)
|> Array.rev
|> printfn "%A"
Çıktı şudur
[|100; 36; 16; 4|]
Çok Boyutlu Diziler
Çok boyutlu dizi oluşturulabilir ancak çok boyutlu dizi değişmez değeri yazmak için hiçbir sözdizimi yoktur.Dizi öğelerin sıralarının serisinden bir dizi oluşturmak için array2D işlecini kullanın.Sıralar, dizi ya da liste sabitleri olabilir.Örneğin, aşağıdaki kod iki boyutlu bir dizi oluşturur.
let my2DArray = array2D [ [ 1; 0]; [0; 1] ]
Üç ve dört boyutları diziler için kullanılabilen iki boyutlu dizileri başlatmak için Array2D.init işlevini de kullanabilirsiniz.Bu işlevler öğeleri oluşturmak için kullanılan bir işlevi alır.Bir işlev belirtmek yerine bir başlangıç değerine ayarlanmış öğeler içeren iki boyutlu bir dizi oluşturmak için, dört boyuta kadar diziler için de kullanılabilir olan Array2D.create işlevini kullanın.Aşağıdaki kod örneği, önce istenen öğeleri barındıran dizileri içeren bir dizinin nasıl oluşturulacağını gösterir, ardından istenen iki boyutlu diziyi oluşturmak için Array2D.init kullanır.
let arrayOfArrays = [| [| 1.0; 0.0 |]; [|0.0; 1.0 |] |]
let twoDimensionalArray = Array2D.init 2 2 (fun i j -> arrayOfArrays.[i].[j])
Dizi için dizin oluşturma ve dilimleme sözdizimi en fazla 4 dereceye kadar diziler için desteklenir.Birden çok boyutta dizin belirtirken, aşağıdaki kod örneğinde gösterildiği gibi dizinleri birbirinden ayırmak için virgül kullanırsınız.
twoDimensionalArray.[0, 1] <- 1.0
İki boyutlu bir dizinin türü <type>[,] olarak yazılır (örneğin, int[,], double[,]), üç boyutlu bir dizinin türü ise <type>[,,] olarak yazılır ve daha fazla boyutlu diziler için bu şekilde devam eder.
Yalnızca tek boyutlu diziler için kullanılabilir işlevler alt kümesi , çok boyutlu diziler için de kullanılabilir.Daha fazla bilgi için bkz. Collections.Array Modülü (F#), Collections.Array2D Modülü (F#), Collections.Array3D Modülü (F#) ve Collections.Array4D Modülü (F#).
Dizi Dilimleme ve Çok Boyutlu Diziler
İki boyutlu bir dizi içinde (matrix) bir alt matrisi, aralığı belirterek ve tüm satırları veya sütunları belirtmek için (*) joker karakterini kullanarak ayıklayabilirsiniz.
// Get rows 1 to N from an NxM matrix (returns a matrix):
matrix.[1.., *]
// Get rows 1 to 3 from a matrix (returns a matrix):
matrix.[1..3, *]
// Get columns 1 to 3 from a matrix (returns a matrix):
matrix.[*, 1..3]
// Get a 3x3 submatrix:
matrix.[1..3, 1..3]
F# 3.1'den itibaren, çok boyutlu bir diziyi aynı veya daha düşük boyutlara ayırabilirsiniz.Örneğin tek bir satır ya da sütun belirterek bir matristen bir vektör elde edebilirsiniz.
// Get row 3 from a matrix as a vector:
matrix.[3, *]
// Get column 3 from a matrix as a vector:
matrix.[*, 3]
Bu dilimleme sözdizimini, öğeye erişimi işleçlerini ve aşırı yüklenen GetSlice yöntemlerini uygulayan türler için kullanabilirsiniz.Örneğin aşağıdaki kod, F# 2D dizisini saran bir Matris türü oluşturur, bir Öğe özelliğini dizi indekslemeye destek sunmak için uygular ve üç GetSlice versiyonunu uygular.Bu kodu matris türleriniz için bir şablon olarak kullanabilirseniz bu bölümde açıklanan tüm dilimleme işlemlerini kullanabilirsiniz.
type Matrix<'T>(N: int, M: int) =
let internalArray = Array2D.zeroCreate<'T> N M
member this.Item
with get(a: int, b: int) = internalArray.[a, b]
and set(a: int, b: int) (value:'T) = internalArray.[a, b] <- value
member this.GetSlice(rowStart: int option, rowFinish : int option,
colStart: int option, colFinish : int option) =
let rowStart = match rowStart with
| Some(v) -> v
| None -> 0
let rowFinish = match rowFinish with
| Some(v) -> v
| None -> internalArray.GetLength(0) - 1
let colStart = match colStart with
| Some(v) -> v
| None -> 0
let colFinish = match colFinish with
| Some(v) -> v
| None -> internalArray.GetLength(1) - 1
internalArray.[rowStart..rowFinish, colStart..colFinish]
member this.GetSlice(row: int, colStart: int option, colFinish: int option) =
let colStart = match colStart with
| Some(v) -> v
| None -> 0
let colFinish = match colFinish with
| Some(v) -> v
| None -> internalArray.GetLength(1) - 1
internalArray.[row, colStart..colFinish]
member this.GetSlice(rowStart: int option, rowFinish: int option, col: int) =
let rowStart = match rowStart with
| Some(v) -> v
| None -> 0
let rowFinish = match rowFinish with
| Some(v) -> v
| None -> internalArray.GetLength(0) - 1
internalArray.[rowStart..rowFinish, col]
module test =
let generateTestMatrix x y =
let matrix = new Matrix<float>(3, 3);
for i in 0..2 do
for j in 0..2 do
matrix.[i, j] <- float(i) * x - float(j) * y
matrix
let test1 = generateTestMatrix 2.3 1.1
let submatrix = test1.[0..1, 0..1]
printfn "%A" submatrix
let firstRow = test1.[0,*]
let secondRow = test1.[1,*]
let firstCol = test1.[*,0]
printfn "%A" firstCol
Diziler Üzerindeki Boole İşlevleri
Array.exists ve Array.exists2 işlevleri sırasıyla bir veya iki dizedeki öğeleri test eder.Bu işlevler bir test işlevini alır ve koşulu karşılayan bir öğe (veya Array.exists2 için bir öğe çifti) varsa true döndürür.
Aşağıdaki kod Array.exists ve Array.exists2 öğelerinin kullanımını gösterir.Bu örneklerde; yeni işlevler, işlev bağımsız değişkeni olan yeni işlevler bağımsız değişkenlerden yalnızca birini uygulayarak oluşturulur.
let allNegative = Array.exists (fun elem -> abs (elem) = elem) >> not
printfn "%A" (allNegative [| -1; -2; -3 |])
printfn "%A" (allNegative [| -10; -1; 5 |])
printfn "%A" (allNegative [| 0 |])
let haveEqualElement = Array.exists2 (fun elem1 elem2 -> elem1 = elem2)
printfn "%A" (haveEqualElement [| 1; 2; 3 |] [| 3; 2; 1|])
Önceki kodun çıktısı aşağıdaki gibidir.
true
false
false
true
Benzer şekilde, Array.forall işlevi, her öğenin bir Boolean koşulu karşılayıp karşılamadığını belirlemek için bir dizi test eder.Array.forall2 çeşitlemesi, eşit uzunlukta iki dizinin öğeleriyle ilgili bir Boole işlevi kullanarak aynı şeyi yapar.Aşağıdaki kod bu işlevlerin kullanımını gösterir.
let allPositive = Array.forall (fun elem -> elem > 0)
printfn "%A" (allPositive [| 0; 1; 2; 3 |])
printfn "%A" (allPositive [| 1; 2; 3 |])
let allEqual = Array.forall2 (fun elem1 elem2 -> elem1 = elem2)
printfn "%A" (allEqual [| 1; 2 |] [| 1; 2 |])
printfn "%A" (allEqual [| 1; 2 |] [| 2; 1 |])
Bu örneklerin çıktısı aşağıdaki gibidir.
false
true
true
false
Arama Dizileri
Array.find Boole işlevini alır ve koşulu sağlayan herhangi bir öğe bulunmazsa işlevin true döndürdüğü veya KeyNotFoundException ortaya çıkardığı ilk öğeyi döndürür.Array.findIndex, Array.find öğesine benzer ancak öğenin kendisini döndürmek yerine öğenin dizinini döndürür.
Aşağıdaki kod hem mükemmel bir kare hem de küp olan bir sayıyı bulmak için Array.find ve Array.findIndex kullanır.
let arrayA = [| 2 .. 100 |]
let delta = 1.0e-10
let isPerfectSquare (x:int) =
let y = sqrt (float x)
abs(y - round y) < delta
let isPerfectCube (x:int) =
let y = System.Math.Pow(float x, 1.0/3.0)
abs(y - round y) < delta
let element = Array.find (fun elem -> isPerfectSquare elem && isPerfectCube elem) arrayA
let index = Array.findIndex (fun elem -> isPerfectSquare elem && isPerfectCube elem) arrayA
printfn "The first element that is both a square and a cube is %d and its index is %d." element index
Çıktı aşağıdaki gibidir.
The first element that is both a square and a cube is 64 and its index is 62.
Array.tryFind, Array.find gibidir, ancak sonucu seçenek türüdür ve herhangi bir öğe bulunmadığında None döndürür.Eşleştirme öğesinin dizide olup olmadığı bilinmiyorsa Array.find yerine Array.tryFind kullanılmalıdır.Benzer şekilde, Array.tryFindIndex tıpkı Array.findIndex gibidir, seçenek türünün dönüş değeri olması dışında.Hiçbir öğe bulunamazsa, seçenek None olur.
Aşağıdaki kod Array.tryFind öğesinin kullanımını gösterir.Bu kod, önceki koda bağlıdır.
let delta = 1.0e-10
let isPerfectSquare (x:int) =
let y = sqrt (float x)
abs(y - round y) < delta
let isPerfectCube (x:int) =
let y = System.Math.Pow(float x, 1.0/3.0)
abs(y - round y) < delta
let lookForCubeAndSquare array1 =
let result = Array.tryFind (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1
match result with
| Some x -> printfn "Found an element: %d" x
| None -> printfn "Failed to find a matching element."
lookForCubeAndSquare [| 1 .. 10 |]
lookForCubeAndSquare [| 100 .. 1000 |]
lookForCubeAndSquare [| 2 .. 50 |]
Çıktı aşağıdaki gibidir.
Found an element: 1
Found an element: 729
Bulunmasına ek olarak öğeyi dönüştürmeniz de gerektiğinde Array.tryPick kullanın.Sonuç, işlevin seçenek değeri olarak dönüştürülmüş öğeyi döndürdüğü ilk öğe veya böyle bir öğe bulunamazsa None olur.
Aşağıdaki kod Array.tryPick öğesinin kullanımını gösterir.Bu durumda lambda ifadesi yerine birkaç yerel yardımcı işlev, kodu basitleştirmek için tanımlanır.
let findPerfectSquareAndCube array1 =
let delta = 1.0e-10
let isPerfectSquare (x:int) =
let y = sqrt (float x)
abs(y - round y) < delta
let isPerfectCube (x:int) =
let y = System.Math.Pow(float x, 1.0/3.0)
abs(y - round y) < delta
// intFunction : (float -> float) -> int -> int
// Allows the use of a floating point function with integers.
let intFunction function1 number = int (round (function1 (float number)))
let cubeRoot x = System.Math.Pow(x, 1.0/3.0)
// testElement: int -> (int * int * int) option
// Test an element to see whether it is a perfect square and a perfect
// cube, and, if so, return the element, square root, and cube root
// as an option value. Otherwise, return None.
let testElement elem =
if isPerfectSquare elem && isPerfectCube elem then
Some(elem, intFunction sqrt elem, intFunction cubeRoot elem)
else None
match Array.tryPick testElement array1 with
| Some (n, sqrt, cuberoot) -> printfn "Found an element %d with square root %d and cube root %d." n sqrt cuberoot
| None -> printfn "Did not find an element that is both a perfect square and a perfect cube."
findPerfectSquareAndCube [| 1 .. 10 |]
findPerfectSquareAndCube [| 2 .. 100 |]
findPerfectSquareAndCube [| 100 .. 1000 |]
findPerfectSquareAndCube [| 1000 .. 10000 |]
findPerfectSquareAndCube [| 2 .. 50 |]
Çıktı aşağıdaki gibidir.
Found an element 1 with square root 1 and cube root 1.
Found an element 64 with square root 8 and cube root 4.
Found an element 729 with square root 27 and cube root 9.
Found an element 4096 with square root 64 and cube root 16.
Diziler üzerinde Hesaplamalar Gerçekleştirme
Array.average işlevi bir dizideki her öğenin ortalamasını verir.İntegral türleri değil, kayan nokta türlerini kapsayan tam bölmeyi destekleyen öğe türleriyle sınırlıdır.Array.averageBy işlevi her öğedeki bir işlev çağırmanın sonuçlarının ortalamasını verir.Bir tamsayı türü dizisi için Array.averageBy öğesini kullanabilir ve işlevin her öğeyi hesaplama için bir kayan nokta türüne dönüştürmesini sağlayabilirsiniz.
Öğe türü destekliyorsa en büyük veya en küçük öğeyi almak için Array.max veya Array.min kullanın.Benzer şekilde, Array.maxBy ve Array.minBy bir işlevin önce yürütülmesine, belki de karşılaştırma destekleyen bir türe dönüşmesine izin verir.
Array.sum diziye bir öğe ekler ve Array.sumBy her bir öğede bir işlev çağırır ve sonuçları bir araya getirir.
Dönüş değerlerini depolamadan bir dizideki her öğe üzerinde bir işlevi yürütmek için, Array.iter öğesini kullanın.eşit uzunluktaki iki diziyi içeren bir işlev için Array.iter2'yi kullanın.Ayrıca işlevin sonuçlarının bir dizisini saklamanız gerekiyorsa Array.map ya da Array.map2 kullanın, bunlar bir kerede iki dizi üzerinde çalışır.
Array.iteri ve Array.iteri2 çeşitlemeleri öğenin dizininin hesaplamaya dahil edilmesine olanak verir; aynı şey Array.mapi ve Array.mapi2 için de geçerlidir.
Array.fold, Array.foldBack, Array.reduce, Array.reduceBack, Array.scan ve Array.scanBack işlevleri, bir dizinin tüm öğelerine ilişkin algoritmaları yürütür.Benzer şekilde, Array.fold2 ve Array.foldBack2 çeşitlemeleri iki diziler üzerinde hesaplamalar gerçekleştirir.
Hesaplamaları gerçekleştirmek için kullanılan bu işlevler Liste modülündeki aynı adlı işlevlere karşılık gelir.Kullanım örnekleri için bkz. Listeler (F#).
Dizileri Değiştirme
Array.set bir öğeyi belirtilen değere ayarlar.Array.fill bir dizideki öğe aralığını belirli bir değere ayarlar.Aşağıdaki kod, Array.fill öğesine bir örnektir.
let arrayFill1 = [| 1 .. 25 |]
Array.fill arrayFill1 2 20 0
printfn "%A" arrayFill1
Çıktı aşağıdaki gibidir.
[|1; 2; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 23; 24; 25|]
Bir dizinin alt dizisini başka bir diziye kopyalamak için Array.blit seçeneğini kullanabilirsiniz.
Diğer Türlere ve Türlerden Dönüştürmeler
Array.ofList bir listeden dizi oluşturur.Array.ofSeq bir sıradan dizi oluşturur.Array.toList ve Array.toSeq dizi türünden diğer koleksiyon türlerine dönüştürür.
Dizileri Sıralama
Genel karşılaştırma işlevini kullanarak diziyi sıralamak için Array.sort kullanın.Anahtar olarak bilinen değer oluşturan bir işlevi belirtmek, anahtarda genel karşılaştırma işlevini kullanarak sıralamak için Array.sortBy kullanın.Özel bir karşılaştırma işlevi sağlamak isterseniz Array.sortWith kullanın.Array.sort, Array.sortBy ve Array.sortWith sıralanmış bir diziyi yeni bir dizi olarak döndürür.Array.sortInPlace, Array.sortInPlaceBy ve Array.sortInPlaceWith çeşitlemeleri yeni bir dizi döndürmek yerine varolan dizide değişiklik yapar.
Diziler ve Tanımlama Grupları
Array.zip ve Array.unzip işlevleri, kayıt düzeni çiftlerinin dizilerini dizilerin kayıt düzenlerine dönüştürür (veya tersini yapar).Array.zip3 ve Array.unzip3 benzerdir, ancak üç öğe tanımlama grubuyla veya üç dizi tanımlama grubuyla çalışması yönünden birbirinden farklıdır.
Diziler üzerinde Paralel Hesaplamalar
Array.Parallel modülü, diziler üzerinde paralel hesaplamalar gerçekleştirmek için işlevler içerir.Bu modül, .NET Framework sürüm 4'ten önceki sürümleri hedefleyen uygulamalarda kullanılamaz.