Diziler (F #)

Diziler, aynı türde olan ardışık veri öğelerinin sabit boyutlu, sıfır tabanlı ve değişebilir koleksiyonlarıdır.

Dizi oluştur

Çeşitli yollarla diziler oluşturabilirsiniz. [| |] Aşağıdaki örneklerde gösterildiği gibi, ve arasında ardışık değerleri noktalı virgülle ayırarak küçük bir dizi oluşturabilirsiniz.

let array1 = [| 1; 2; 3 |]

Ayrıca her öğeyi ayrı bir satıra koyabilirsiniz, bu durumda noktalı virgül ayırıcı isteğe bağlıdır.

let array1 =
    [|
        1
        2
        3
     |]

Dizi öğelerinin türü, kullanılan değişmez değerlerden çıkarılan ve tutarlı olmalıdır. Aşağıdaki kod bir hataya neden olur, çünkü 1,0 bir float ve 2 ve 3 tamsayılardır.

// Causes an error.
// let array2 = [| 1.0; 2; 3 |]

Diziler oluşturmak için dizi ifadelerini de kullanabilirsiniz. Aşağıda, 1 ile 10 arasında bir tamsayı kare dizisi oluşturan bir örnek verilmiştir.

let array3 = [| for i in 1 .. 10 -> i * i |]

Tüm öğelerin sıfıra başlatıldığı bir dizi oluşturmak için kullanın Array.zeroCreate .

let arrayOfTenZeroes : int array = Array.zeroCreate 10

Erişim öğeleri

Dizi öğelerine bir nokta işleci ( . ) ve köşeli ayraçlar (ve) kullanarak erişebilirsiniz [ ] .

array1[0]

Dizi dizinleri 0 ' dan başlar.

Ayrıca, dizi öğelerine, dizinin bir alt aralığını belirtmenizi sağlayan dilim gösterimini kullanarak erişebilirsiniz. Dilim gösterimi örnekleri aşağıda verilmiştir.

// 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ülleri

tüm F # dizilerinin türü .NET Framework türüdür System.Array . Bu nedenle, F # dizileri ' de bulunan tüm işlevleri destekler System.Array .

Array Modül , tek boyutlu dizilerde işlemleri destekler. Modüller, Array2D Array3D ve Array4D sırasıyla iki, üç ve dört boyutun dizilerindeki işlemleri destekleyen işlevler içerir. Kullanarak dörtten büyük dizi dizileri oluşturabilirsiniz System.Array .

Basit işlevler

Array.get bir öğeyi alır. Array.length bir dizinin uzunluğuna izin 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

Dizi oluşturan işlevler

Çeşitli işlevler, var olan bir dizi gerekmeden diziler oluşturur. Array.empty herhangi bir öğe içermeyen yeni bir dizi oluşturur. Array.create belirtilen boyuttaki bir dizi oluşturur ve tüm öğeleri sağlanmış değerlere ayarlar. Array.init öğeleri oluşturmak için bir boyut ve bir işlev verildiğinde bir dizi oluşturur. Array.zeroCreate tüm öğelerin, dizinin türü için sıfır değere 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 Varolan bir diziden kopyalanmış öğeleri içeren yeni bir dizi oluşturur. Kopyanın basit bir kopya olduğunu, yani öğe türü bir başvuru türü ise, temeldeki nesne değil yalnızca başvurunun kopyalanacağını 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; |]

Dize Test1 yalnızca ilk dizide görünür çünkü yeni bir öğe oluşturma işlemi içindeki başvurunun üzerine yazar, firstArray ancak hala içinde mevcut olan boş bir dizeye özgün başvuruyu etkilemez secondArray . Dize Test2 her iki dizide de görünür çünkü Insert türdeki işlem, System.Text.StringBuilder System.Text.StringBuilder her iki dizide de başvurulan temel nesneyi etkiler.

Array.sub bir dizinin alt aralığından yeni bir dizi oluşturur. Başlangıç dizinini ve uzunluğunu belirterek alt aralığı belirtirsiniz. Aşağıdaki kod öğesinin kullanımını gösterir Array.sub .

let a1 = [| 0 .. 99 |]
let a2 = Array.sub a1 5 10
printfn "%A" a2

Çıktı, alt dizinin 5. öğede başlayacağını ve 10 öğe içerdiğini gösterir.

[|5; 6; 7; 8; 9; 10; 11; 12; 13; 14|]

Array.append Varolan iki diziyi birleştirerek yeni bir dizi oluşturur.

Aşağıdaki kodda Array. Append gösterilmektedir.

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 etmek için bir dizinin öğelerini seçer. Aşağıdaki kod gösterilmektedir Array.choose . Dizinin öğe 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ü ' dir int ve seçenek, elem*elem - 1 kayan noktalı sayı olarak bir polinom işlevinin 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 Varolan bir dizinin her bir dizi öğesinde belirtilen 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 gösterilmektedir Array.collect .

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 dizisini alır ve bunları tek bir dizi halinde birleştirir. Aşağıdaki kod gösterilmektedir Array.concat .

Array.concat [ [|0..3|] ; [|4|] ]
//output [|0; 1; 2; 3; 4|]

Array.concat [| [|0..3|] ; [|4|] |]
//output [|0; 1; 2; 3; 4|]

Ö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 bir Boolean koşul işlevi alır ve yalnızca koşulun doğru olduğu Giriş dizisindeki öğeleri içeren yeni bir dizi oluşturur. Aşağıdaki kod gösterilmektedir Array.filter .

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 Varolan bir dizinin sırasını tersine çevirerek yeni bir dizi oluşturur. Aşağıdaki kod gösterilmektedir Array.rev .

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!"

Aşağıdaki örnekte gösterildiği gibi, ardışık düzen işlecini () 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ı

[|100; 36; 16; 4|]

Çok boyutlu diziler

Çok boyutlu bir dizi oluşturulabilir, ancak çok boyutlu bir dizi değişmez değeri yazmak için sözdizimi yoktur. array2DDizi öğelerinden oluşan dizilerden bir dizi oluşturmak için işlecini kullanın. Diziler dizi veya liste sabit değerleri olabilir. Örneğin, aşağıdaki kod iki boyutlu bir dizi oluşturur.

let my2DArray = array2D [ [ 1; 0]; [0; 1] ]

Ayrıca, işlevini Array2D.init iki boyutun dizilerini başlatmak için de kullanabilirsiniz ve benzer işlevler üç ve dört boyutlu diziler için kullanılabilir. Bu işlevler, öğeleri oluşturmak için kullanılan bir işlevi alır. Bir işlev belirtmek yerine bir başlangıç değeri olarak ayarlanan öğeleri içeren iki boyutlu bir dizi oluşturmak için, Array2D.create en fazla dört boyuta kadar diziler için de kullanılabilir olan işlevini kullanın. Aşağıdaki kod örneği, önce istenen öğeleri içeren bir dizi dizinin nasıl oluşturulacağını gösterir ve ardından Array2D.init istenen iki boyutlu diziyi oluşturmak için 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 dizin oluşturma ve dilimleme sözdizimi, sıralama 4 ' e kadar olan diziler için desteklenir. Birden çok boyutta bir dizin belirttiğinizde, aşağıdaki kod örneğinde gösterildiği gibi, dizinleri ayırmak için virgül kullanırsınız.

twoDimensionalArray[0, 1] <- 1.0

İki boyutlu bir dizinin türü olarak yazılır <type>[,] (örneğin,, int[,] double[,] ) ve üç boyutlu bir dizinin türü <type>[,,] , daha yüksek boyutlarda diziler için olarak yazılır.

Tek boyutlu diziler için kullanılabilen işlevlerin yalnızca bir alt kümesi, çok boyutlu diziler için de kullanılabilir.

Dizi Dilimleme ve çok boyutlu diziler

İki boyutlu bir dizide (bir matris), aralıkları belirterek ve * tüm satırları veya sütunları belirtmek için bir joker karakter () karakterini kullanarak bir alt matrisi 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]

Çok boyutlu bir diziyi, aynı veya alt boyutun alt dizileri halinde parçalara ayırmayı sağlayabilirsiniz. Örneğin, tek bir satır veya sütun belirterek bir matreden 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, öğe erişim işleçleri ve aşırı yüklenmiş yöntemler uygulayan türler için kullanabilirsiniz GetSlice . Örneğin, aşağıdaki kod F # 2D dizisini sarmalayan bir matris türü oluşturur, dizi dizini oluşturma desteği sağlamak için bir öğe özelliği uygular ve üç sürümünü uygular GetSlice . Bu kodu matris türleriniz için bir şablon olarak kullanacaksanız, 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 $"{submatrix}"

    let firstRow = test1[0,*]
    let secondRow = test1[1,*]
    let firstCol = test1[*,0]
    printfn $"{firstCol}"

Diziler üzerinde Boole işlevleri

Array.exists Array.exists2 Sırasıyla bir veya iki dizide bulunan işlevler ve test öğeleri. Bu işlevler bir test işlevi alır ve true koşulu karşılayan bir öğe (veya öğe çifti) varsa döndürülür Array.exists2 .

Aşağıdaki kod, ve kullanımını göstermektedir Array.exists Array.exists2 . Bu örneklerde, bağımsız değişkenlerden yalnızca biri uygulanarak, bu durumlarda işlev bağımsız değişkeni olarak yeni işlevler 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, işlevi Array.forall her öğenin bir Boole koşulunu karşılayıp karşılamadığını tespit etmek için bir diziyi sınar. Çeşitleme, Array.forall2 aynı şeyi eşit uzunlukta iki dizinin öğelerini içeren bir Boolean işlevi kullanarak 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

Dizileri arama

Array.find bir Boole işlevi alır ve işlevin döndür olduğu ilk öğeyi döndürür veya koşulu yerine getiren bir öğesi true System.Collections.Generic.KeyNotFoundException bulunamıyorsa bir döndürür. Array.findIndex , Array.find öğesinin kendisi yerine öğenin dizinini döndüren dışında gibi olur.

Aşağıdaki kod, mükemmel Array.find bir kare ve mükemmel bir küp olan bir sayı bulmak için 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 , sonucu bir seçenek türü olduğu ve öğe bulunamaysa Array.find None döndür olduğu dışında gibidir. Array.tryFind eşleşen bir Array.find öğenin dizide olup olmadığını bilmiyorken yerine kullanılmalıdır. Benzer şekilde, Array.tryFindIndex seçenek türünün dönüş değeri olduğu dışında Array.findIndex benzerdir. Herhangi bir öğe bulunamasa seçeneği None şudur: .

Aşağıdaki kod, kullanımını Array.tryFind gösteriyor. 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
Failed to find a matching element.

Bir Array.tryPick öğeyi bulmanın yanı sıra dönüştürmeniz gereken zamanları kullanın. Sonuç, işlevin dönüştürülmüş öğeyi seçenek değeri olarak döndüren ilk öğedir veya None böyle bir öğe bulunamamıştır.

Aşağıdaki kod, kullanımını Array.tryPick gösterir. Bu durumda, lambda ifadesi yerine, kodu basitleştirmek için birkaç yerel yardımcı işlev 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.
Did not find an element that is both a perfect square and a perfect cube.

Diziler üzerinde hesaplamalar gerçekleştirme

işlevi, Array.average bir dizideki her öğenin ortalamasını döndürür. Kayan nokta türlerini içeren ancak tamsayı türlerini içeren tamsayıya göre tam olarak bölmeyi destekleyen öğe türleriyle sınırlıdır. işlevi, Array.averageBy her öğede bir işlevi çağırmanın sonuçlarının ortalamasını döndürür. İntegral türünde bir dizi için kullanabilir ve işlevinin her öğeyi hesaplama için kayan nokta Array.averageBy türüne dönüştürmesini sebilirsiniz.

Öğe Array.max türü Array.min destekliyorsa, en yüksek veya en düşük öğeyi almak için veya kullanın. Benzer şekilde Array.maxBy ve ilk olarak bir Array.minBy işlevin yürütülmesine izin vermek, belki de karşılaştırmayı destekleyen bir türe dönüştürmektir.

Array.sum bir dizinin öğelerini ekler ve her Array.sumBy öğeye bir işlev çağırarak sonuçları bir araya ekler.

Dönüş değerlerini depolamadan bir dizideki her öğede bir işlev yürütmek için Array.iter kullanın. Eşit uzunlukta iki dizi içeren bir işlev için Array.iter2 kullanın. ayrıca işlevin sonuçlarının bir dizisini tutmamız gerekirse, aynı anda iki dizi Array.map Array.map2 üzerinde çalışan veya kullanın.

varyasyonları ve öğenin dizininin hesaplamaya dahil olmasına olanak Array.iteri Array.iteri2 sağlar; ve için de aynı Array.mapi durum söz Array.mapi2 konusudur.

, Array.fold , Array.foldBack Array.reduce , , Array.reduceBack ve Array.scan Array.scanBack işlevleri, bir dizinin tüm öğelerini içeren algoritmaları yürütür. Benzer şekilde, varyasyonları Array.fold2 ve Array.foldBack2 hesaplamaları iki dizi üzerinde gerçekleştirin.

Hesaplamaları gerçekleştirmeye ilişkin bu işlevler Liste modülünde aynı adı alan işlevlere karşılık gelen işlevlerdir. Kullanım örnekleri için bkz. Listeler.

Dizileri değiştirme

Array.set , bir öğeyi belirtilen değere ayarlar. Array.fill , bir dizide belirtilen bir değere öğe aralığını ayarlar. Aşağıdaki kod bir örneği Array.fill sağlar.

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 Array.blit alt bir kopyasını başka bir diziye kopyalamak için kullanabilirsiniz.

Diğer türlere ve türlerden dönüştürme

Array.ofList bir listeden dizi oluşturur. Array.ofSeq bir diziden bir dizi oluşturur. Array.toList ve Array.toSeq dizi türünden bu diğer koleksiyon türlerine dönüştürür.

Dizileri sıralama

Bir Array.sort diziyi genel karşılaştırma işlevini kullanarak sıralamak için kullanın. anahtarda genel karşılaştırma işlevini kullanarak sıralamak için anahtar olarak adlandırılan bir değer oluşturan bir Array.sortBy işlev belirtmek için kullanın. Özel Array.sortWith bir karşılaştırma işlevi sağlamak için kullanın. Array.sort, Array.sortBy ve Array.sortWith hepsi sıralanmış diziyi yeni bir dizi olarak döndürür. , ve Array.sortInPlace Array.sortInPlaceBy çeşitlemeleri, Array.sortInPlaceWith yeni bir dizi dönmek yerine var olan diziyi değiştirir.

Diziler veuples

işlevleri ve Array.zip Array.unzip grup çiftleri dizilerini dizilerinuples'ine (veya tam tersi) dönüştürür. Array.zip3Array.unzip3ve , üç öğeden veya üç diziden biruples ile çalışma dışında benzerdir.

Dizilerde paralel hesaplamalar

Modül, Array.Parallel diziler üzerinde paralel hesaplamalar gerçekleştirmek için işlevler içerir. Bu modül, sürüm 4'den önceki .NET Framework sürümlerini hedef alan uygulamalarda kullanılamaz.

Ayrıca bkz.