Inhoud

# ScriptForge.Array service

Geeft methodes voor het manipuleren en omzetten van eendimensionale matrixen (vectoren) en tweedimensionale matrixen. Dit is inclusief het zetten, sorteren, importeren uit en exporteren naar tekstbestanden.

Voor matrixen met meer dan twee dimensies kunnen deze methodes niet worden gebruikt, hierop is één uitzondering, de methode CountDims.

Een item in een matrix kan elke waarde bevatten, ook een matrix.

## Service aanroep

Voordat de service Array gebruikt kan worden moet de ScriptForge bibliotheek worden geladen met:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Door het laden van de bibliotheek wordt een object SF_Array aangemaakt dat gebruikt kan worden voor het aanroepen van de methodes van de service Array.

De volgende stukjes code tonen manieren om de methodes in de service Array aan te roepen (de methode Append dient als voorbeeld):

        Dim arr : arr = Array(1, 2, 3)
        arr = SF_Array.Append(arr, 4)

        Dim arr : arr = Array(1, 2, 3)
        Dim svc : svc = SF_Array
        arr = svc.Append(arr, 4)

        Dim arr : arr = Array(1, 2, 3)
        Dim svc : svc = CreateScriptService("Array")
        arr = svc.Append(arr, 4)

Omdat Python een interne lijst heeft en tuples ondersteunt, zijn de meeste methodes in de service Array alleen voor Basic-scripts beschikbaar. De enige uitzondering is de methode ImportFromCSVFile die zowel in Basic als Python wordt ondersteund.

De lijst met methodes in de service Array
Append AppendColumn AppendRow Contains ConvertToDictionary Copy CountDims Difference ExportToTextFile ExtractColumn ExtractRow | Flatten ImportFromCSVFile IndexOf Insert InsertSorted Intersection Join2D Prepend PrependColumn PrependRow RangeInit | Reverse Shuffle Slice Sort SortColumns SortRows Transpose TrimArray Union Unique

Het eerste argument van de meeste methodes is het te beschouwen matrix-object. Het wordt bij referentie doorgegeven en het wordt niet gewijzigd. Methodes zoals Append, Prepend, enz geven na uitvoering een nieuw object terug.

## Append

Voegt de genoemde items als argumenten toe aan het invoer-matrix.

### Syntaxis:

svc.Append(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]

### Parameters:

array_1d : De reeds bestaande matrix, kan leeg zijn..

arg0, arg1, ...: Items die worden toegevoegd aan array_1d.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Append(Array(1, 2, 3), 4, 5)
            ' (1, 2, 3, 4, 5)

## AppendColumn

Voegt een kolom toe aan de rechterzijde van een tweedimensionale matrix. De nieuwe matrix heeft dezelfde ondergrens als het oorspronkelijke tweedimensionale matrix.

### Syntaxis:

svc.AppendColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]

### Parameters:

array_2d : de bestaande matrix, deze kan leeg zijn. Als de matrix maar een dimensie heeft, dan wordt het beschouwd de eerste kolom van het resulterende tweedimensionale matrix.

column: Een eendimensionaal matrix met evenveel items als dat er rijen zijn in array_2d.

### Voorbeeld:

        Dim a As Variant, b As variant
        a = SF_Array.AppendColumn(Array(1, 2, 3), Array(4, 5, 6))
            ' ((1, 4), (2, 5), (3, 6))
        b = SF_Array.AppendColumn(a, Array(7, 8, 9))
            ' ((1, 4, 7), (2, 5, 8), (3, 6, 9))
        c = SF_Array.AppendColumn(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(0, i) ≡ i

## AppendRow

Voegt aan de onderkant van een tweedimensionale matrix een nieuwe regel toe. De resulterende matrix heeft dezelfde ondergrens.

### Syntaxis:

svc.AppendRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*])

### Parameters:

array_2d : de al bestaande matrix, deze matrix kan leeg zijn. Als het een eendimensionale matrix is, dan wordt het gezien als de eerste rij van het resulterende tweedimensionale matrix.

row: Een eendimensionale matrix met evenveel items als dat er kolommen zijn in array_2d.

### Voorbeeld:

        Dim a As Variant, b As variant
        a = SF_Array.AppendRow(Array(1, 2, 3), Array(4, 5, 6))
            '  ((1, 2, 3), (4, 5, 6))
        b = SF_Array..AppendRow(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(i, 0) ≡ i

## Contains

Controleert of een eendimensionale matrix een bepaald getal, tekst of datum bevat. De tekstvergelijking kan wel/niet hoofdletterafhankelijk zijn.
Gesorteerde invoer-matrixen moeten op dezelfde manier zijn gevuld, dat betekent dat alle items van hetzelfde type moeten zijn (Lege en Null items zijn niet toegestaan).
Het resultaat van de methode is onvoorspelbaar als u aangeeft dat het een gesorteerd matrix is en het is het niet.
Als het een gesorteerde matrix is wordt er een binaire zoek gedaan, in het andere geval wordt het hele matrix doorlopen waarbij items die leeg of Null zijn worden overgeslagen.

### Syntaxis:

svc.Contains(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ""): bool

### Parameters:

array_1d : De te doorzoeken matrix.

tofind : het getal, de datum of de tekst waarnaar gezocht moet worden.

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

sortorder : Mogelijke waardes zijn "ASC", "DESC" en "" (niet gesorteerd). De standaardwaarde is "".

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Contains(Array("A","B","c","D"), "C", SortOrder := "ASC") ' True
        SF_Array.Contains(Array("A","B","c","D"), "C", CaseSensitive := True) ' False

## ConvertToDictionary

Sla de inhoud van een tweedimensionale matrix op in een ScriptForge.bibiotheek-object.
De sleutel wordt bepaald uit de eerste kolom, het item uit de tweede kolom.

### Syntaxis:

svc.ConvertToDictionary(array_2d: any[0..*, 0..1]): obj

### Parameters:

array_2d: Gegevens die geconverteerd moeten worden in een object ScriptForge.Dictionary.

- De eerste kolom mag alleen teksten bevat met een lengte groter dan 0, de volgorde is niet van belang. Deze waardes worden in de bibliotheek gebruikt als labels.

- De tweede kolom bevat de gegevens die zullen gekoppeld worden aan de in de bibliotheek overeenkomende labels.

### Voorbeeld:

        Dim a As Variant, b As Variant
        a = SF_Array.AppendColumn(Array("a", "b", "c"), Array(1, 2, 3))
        b = SF_Array.ConvertToDictionary(a)
        MsgBox b.Item("c") ' 3

## Copy

Kopieert een een- of tweedimensionale matrix.

### Syntaxis:

svc.Copy(array_nd: any[0..*]): any[0..*]

svc.Copy(array_nd: any[0..*, 0..*]): any[0..*, 0..*]

### Parameters:

array_nd: De te kopiëren matrix.

### Voorbeeld:

Een eenvoudige toekenning van een object Array maakt een kopie van de referentie en dus niet van de inhoud van het object. Bekijk het onderstaande voorbeeld:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' De toekenning hieronder is gemaakt door referentie
        b = a
        ' Dat betekent dat een wijziging van een waarde in "b" ook "a" wijzigt
        b(0) = 10
        MsgBox a(0) ' 10

Door de methode Copy te gebruiken wordt er een kopie van het object Array gemaakt. In het voorbeeld hieronder zijn a en b verschillende objecten. Een wijziging van een waarde in b heeft nu geen gevolgen voor die waarde in a.

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Maakt met een methode "Copy" een kopie van "a"
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Telt het aantal dimensies van een matrix. Dat kan meer dan twee zijn.
Als het argument geen matrix is, is de uitkomst -1
Als de matrix niet geïnitialiseerd is dan is de uitkomst 0.

### Syntaxis:

svc.CountDims(array_nd: any): int

### Parameters:

array_nd : De te doorzoeken matrix.

### Voorbeeld:

        Dim a(1 To 10, -3 To 12, 5)
        MsgBox SF_Array.CountDims(a) ' 3

## Difference

Bouwt een set op, als een zero-based matrix , door de verschil-operator te gebruiken op de twee invoer-matrixen. De items in de uitvoer komen uit het eerste invoer-matrix en niet uit het tweede.
Het uitvoer-matrix is oplopend gesorteerd.
Beide invoer-matrixen moeten gelijksoortig gevuld zijn en hun items moeten van hetzelfde type zijn. Lege en Null items zijn niet toegestaan.
Bij het vergelijken van tekst is er een keuze tussen wel/niet hoofdlettergevoelig.

### Syntaxis:

svc.Difference(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameters:

array1_1d : Een eendimensionale matrix waarvan de items bekeken worden voor verwijdering.

array2_1d : Een eendimensionale matrix waarvan de items worden verwijderd uit het eerste invoer-matrix.

casesensitive : Alleen van toepassing bij matrixen met teksten (standaardwaarde is False).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Difference(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("A", "B")

## ExportToTextFile

Schrijf alle items van de matrix naar een tekstbestand. Als het bestand al bestaat dan wordt het bestand, zonder waarschuwing, overschreven.

### Syntaxis:

svc.ExportToTextFile(array_1d: any[0..*], filename: str, [encoding: str]): bool

### Parameters:

array_1d : De te exporteren matrix. Het moet alleen teksten bevatten.

filename: De bestandsnaam van het tekstbestand waar de gegevens naar toe worden geschreven. De naam moet voldoen aan de eisen van de eigenschap FileNaming van de service SF_FileSystem.

encoding : De te gebruiken tekenset. Gebruik één van de namen die in lijst IANA tekenset staat. Controleer wel of deze tekenset door LibreOffice is geïmplementeerd. Standaard is "UTF-8".

### Voorbeeld:

        SF_Array.ExportToTextFile(Array("A","B","C","D"), "C:\Temp\A short file.txt")

## ExtractColumn

Haalt een bepaalde kolom uit een tweedimensionale matrix als een nieuwe matrix.
De LBound-ondergrens en de UBound-bovengrens zijn gelijk aan die van de eerste dimensie van het invoer-matrix.

### Syntaxis:

svc.ExtractColumn(array_2d: any[0..*, 0..*], columnindex: int): any[0..*, 0..*]

### Parameters:

array_2d : De matrix waar gegevens uitgehaald moeten worden.

columnindex : Het nummer van de kolom die eruit gehaald moet worden, dit moet liggen tussen de grenzen [LBound, UBound].

### Voorbeeld:

        'Maakt een 3x3 matrix: |1, 2, 3|
        '                      |4, 5, 6|
        '                      |7, 8, 9|
        Dim mat as Variant, col as Variant
        mat = SF_Array.AppendRow(Array(), Array(1, 2, 3))
        mat = SF_Array.AppendRow(mat, Array(4, 5, 6))
        mat = SF_Array.AppendRow(mat, Array(7, 8, 9))
        'Haalt de derde kolom op: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Haal uit een tweedimensionale matrix een bepaalde rij als een nieuwe matrix.
De LBound-ondergrens en de UBound-bovengrens zijn gelijk aan die van de eerste dimensie van het invoer-matrix.

### Syntaxis:

svc.ExtractRow(array_2d: any[0..*, 0..*], rowindex: int): any[0..*, 0..*]

### Parameters:

array_2d : De matrix waar gegevens uitgehaald moeten worden.

rowindex : Het rijnummer dat opgehaald moet worden, moet liggen tussen de grenzen [LBound, UBound].

### Voorbeeld:

        'Maakt een 3x3 matrix: |1, 2, 3|
        '                      |4, 5, 6|
        '                      |7, 8, 9|
        Dim mat as Variant, row as Variant
        mat = SF_Array.AppendRow(Array(), Array(1, 2, 3))
        mat = SF_Array.AppendRow(mat, Array(4, 5, 6))
        mat = SF_Array.AppendRow(mat, Array(7, 8, 9))
        'Haalt de eerste rij op: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Plaats alle enkele items van een matrix en alle items in een submatrix in een nieuwe matrix zonder submatrixen. Lege submatrixen worden overgeslagen en submatrixen met meer dan een dimensie worden niet afgevlakt.

### Syntaxis:

svc.Flatten(array_1d: any[0..*]): any[0..*]

### Parameters:

array_1d : De reeds bestaande matrix kan leeg zijn.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Flatten(Array(Array(1, 2, 3), 4, 5))
            ' (1, 2, 3, 4, 5)

U kunt de methode Flatten gebruiken met andere methodes als Append en Prepend om een aantal eendimensionale matrixen samen te voegen tot een eendimensionale matrix.

### Voorbeeld:

Nu een voorbeeld hoe de methodes Flatten en Append samen gebruikt kunnen worden om drie matrixen samen te voegen.

        'Maakt drie matrixen aan voor dit voorbeeld
        Dim a as Variant, b as Variant, c as Variant
        a = Array(1, 2, 3)
        b = Array(4, 5)
        c = Array(6, 7, 8, 9)
        'Voegt drie matrixen samen tot een eendimensionale matrix
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Importeer de gegevens in een bestand met komma gescheiden waardes (CSV-bestand). Er kan een ander teken als scheidingsteken worden gebruikt.

De van toepassing zijnde CSV-indeling is beschreven in IETF Common Format and MIME Type for CSV Files.

Elke regel in het bestand bevat een volledig record (splitsen van regels is niet toegestaan).
Reeksen als \n, \t, ... worden echter niet gewijzigd. Gebruik de methode SF_String.Unescape() om hiermee om te gaan.

De methode retourneert een tweedimensionaal matrix waar de rijen overeenkomen met één regel in het invoerbestand, de kolommen komen overeen met een veld in de regel. De velden worden niet op type gecontroleerd. Er wordt geprobeerd de numerieke velden en de datumvelden te bepalen.

Als een regel meer of minder velden bevat dan de eerste regel wordt er een exception gemaakt. Lege regels worden overgeslagen. Als het aantal invoerregels hoger is dan de limiet (bekijk de code), wordt er een waarschuwing gemaakt en wordt de uitvoer beperkt tot de limiet.

### Syntaxis:

svc.ImportFromCSVFile(filename: str, delimiter: str = ',', dateformat: str = ''): any[0..*]

### Parameters:

filename : de naam van het tekstbestand met de gegevens. De naam wordt bepaald door de huidige eigenschap FileNaming van de service SF_FileSystem.

delimeter : Een enkel teken,meestal een komma, puntkomma of een TAB character. (Standaardwaarde is een ",".)

dateformat : Een datum wordt op een bepaalde manier behandeld als de Datumopmaak "YYYY-MM-DD", "DD-MM-YYYY" of "MM-DD-YYYY" is. Het streepje (-) kan ook een punt (.), slash (/) of een spatie zijn. Andere opmaak wordt genegeerd. Een niet gevulde datum wordt gezien als tekst.

### Voorbeeld:

Stel dat er een bestand "myFile.csv" is met de volgende inhoud:

Naam,Geboortedatum,Adres,Plaats

Anna,2002/03/31,"Steenstraat, 21",Arnhem

Fred,1998/05/04,"Zijlweg, 113A",Haarlem

De code om de inhoud van dit CSV-bestand in een object Array te lezen is dan als volgt.

##### In BASIC

        Dim arr As Variant
        arr = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "YYYY/MM/DD")
        MsgBox arr(0, 3) ' Plaats
        MsgBox arr(1, 2) ' Steenstraat, 21
        MsgBox arr(1, 3) ' Arnhem

##### In Python

        from scriptforge import CreateScriptService
        svc = CreateScriptService("Array")
        bas = CreateScriptService("Basic")
        arr = svc.ImportFromCSVFile(r"C:\Temp\myFile.csv", dateformat = "YYYY/MM/DD")
        bas.MsgBox(arr[0][3]) # Plaats
        bas.MsgBox(arr[1][2]) # Steenstraat, 21
        bas.MsgBox(arr[1][3]) # Arnhem

## IndexOf

Zoek in een eendimensionaal matrix naar een getal, een tekst of een datum. Tekstvergelijking kan hoofdlettergevoelig zijn.
Als de matrix gesorteerd is, dan moet dat homogeen gevuld zijn, waarmee wordt bedoelt dat alle items van hetzelfde type moeten zijn (de waardes Empty en Null zijn niet toegestaan).
Als de matrix niet gesorteerd is maar wel is aangegeven dat dat zo is, dan is het resultaat niet voorspelbaar.
Bij gesorteerde matrixen wordt binair gezocht. Bij niet gesorteerde matrixen wordt het hele matrix doorzocht waarbij de waardes Empty en Null worden overgeslagen.
Het resultaat van de methode is LBound(matrix) - 1 als er niets wordt gevonden.

### Syntaxis:

svc.IndexOf(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ''): int

### Parameters:

array_1d : de te doorzoeken matrix.

tofind : het getal, de datum of de tekst waarnaar gezocht moet worden.

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

sortorder : Mogelijke waardes zijn "ASC", "DESC" en "" (niet gesorteerd). De standaardwaarde is "".

### Voorbeeld:

        MsgBox SF_Array.IndexOf(Array("A","B","c","D"), "C", SortOrder := "ASC") ' 2
        MsgBox SF_Array.IndexOf(Array("A","B","c","D"), "C", CaseSensitive := True) ' -1

## Insert

Voegt voor een gegeven index van de invoermatrix de item toe die als argumenten worden genoemd.
Argumenten worden zonder controle toegevoegd. Een argument kan elk type hebben en ook een matrix zijn.

### Syntaxis:

svc.Insert(array_1d: any[0..*], before: int, arg0: any, [arg1: any] ...): any[0..*]

### Parameters:

array_1d : De reeds bestaande matrix, kan leeg zijn.

before: De index waarvoor er gegevens moeten worden toegevoegd. Deze wordt moet natuurlijk in de matrix aanwezig zijn of de volgende index zijn voor het achteraan toevoegen [LBound, UBound + 1].

arg0, arg1, ...: Items die worden toegevoegd aan de matrix array_1d.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Insert(Array(1, 2, 3), 2, "a", "b")
            ' (1, 2, "a", "b", 3)

## InsertSorted

Voegt in een gesorteerd matrix een waarde (op de goede plek) toe.
De matrix moet homogeen gevuld zijn, dus alle waardes moeten van hetzelfde type zijn.
De waardes Empty en Null zijn niet toegestaan.

### Syntaxis:

svc.InsertSorted(array_1d: any[0..*], item: any, sortorder: str = 'ASC', casesensitive: bool = False): any[0..*]

### Parameters:

array_1d: De matrix waarin de waarde moet worden toegevoegd.

item: De waarde die moet worden toegevoegd, deze moet van hetzelfde type zijn als de bestaande items.

sortorder : Mogelijke waardes zijn "ASC" en "DESC". De standaardwaarde is "ASC".

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.InsertSorted(Array("A", "C", "a", "b"), "B", CaseSensitive := True)
            ' ("A", "B", "C", "a", "b")

## Intersection

Met de operator intersection kunt u van twee invoermatrixen een matrix maken die dan de items bevat die in beide invoermatrixen voorkomt..
De items in de uitvoermatrix zijn oplopend gesorteerd.
Beide invoermatrixen moeten hetzelfde type items bevatten. Items mogen niet Empty of Null zijn.
U kunt aangeven of bij het vergelijken van teksten dit hoofdlettergevoelig moet zijn.

### Syntaxis:

svc.Intersection(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameters:

array1_1d: De eerste invoermatrix.

array2_1d: De tweede invoermatrix.

casesensitive : Voor matrixen die teksten bevatten, standaardwaarde is False.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Intersection(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("C", "b")

## Join2D

Een tweedimensionale matrix uitbreiden met twee scheidingstekens, een voor de kolommen en een voor de rijen.

### Syntaxis:

svc.Join2D(array_2d: any [0..*, 0..*], [columndelimiter: str], [rowdelimiter: str], [quote: str]): str

### Parameters:

array_2d: Elke item moet of een tekst, een getal, een datum of een booleaanse waarde zijn.
Datums worden omgezet naar de opmaak YYYY-MM-DD hh:mm:ss.
Ongeldige items worden vervangen door een lege tekenreeks ("").

columndelimiter: Scheidingsteken voor de kolommen (standaardwaarde = Tab/Chr(9)).

rowdelimiter: Scheidingsteken voor de rijen (standaardwaarde = LineFeed/Chr(10))

quote: Indien True, tekenreeksen met dubbele aanhalingstekens worden beschermd. Standaardwaarde is False.

### Voorbeeld:

        ' arr = | 1, 2, "A", [2020-02-29], 51, 2, "A", [2020-02-29], 5           |
        '       | 6, 7, "this is a string", 9, 106, 7, "this is a string", 9, 10 |
        Dim arr as Variant : arr = Array()
        arr = SF_Array.AppendRow(arr, Array(1, 2, "A", [2020-02-29], 51, 2, "A", [2020-02-29], 5))
        arr = SF_Array.AppendRow(arr, Array(6, 7, "this is a string", 9, 106, 7, "this is a string", 9, 10))
        Dim arrText as String
        arrText = SF_Array.Join2D(arr, ",", "/", False)
        ' 1,2,A,,51,2,A,,5/6,7,this is a string,9,106,7,this is a string,9,10

## Prepend

Voegt vooraan een tweedimensionale matrix een aantal items toe die als argumenten zijn opgegeven.

### Syntaxis:

svc.Prepend(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]

### Parameters:

array_1d : De reeds bestaande matrix, kan leeg zijn.

arg0,arg1, ... : een lijst met argumenten die aan array_1d toegevoegd gaan worden.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Prepend(Array(1, 2, 3), 4, 5)
            ' (4, 5, 1, 2, 3)

## PrependColumn

Voegt vooraan aan de linkerkant van een tweedimensionale matrix een kolom toe. De nieuwe matrix heeft dezelfde ondergrenzen als de invoermatrix.

### Syntaxis:

svc.PrependColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]

### Parameters:

array_2d: De matrix die al moet bestaan, maar wel leeg mag zijn. Als het een eendimensionale matrix is, dan wordt het gezien als de laatste kolom van de uiteindelijke tweedimensionale matrix.

column: Een eendimensionale matrix met net zoveel items als dat er rijen zijn in array_2d.

### Voorbeeld:

        Dim a As Variant, b As variant
        a = SF_Array.PrependColumn(Array(1, 2, 3), Array(4, 5, 6))
            ' ((4, 1), (5, 2), (6, 3))
        b = SF_Array.PrependColumn(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(0, i) ≡ i

## PrependRow

Voegt een nieuwe regel vooraan toe in de tweedimensionale matrix. De uiteindelijke matrix heeft dezelfde ondergrenzen.

### Syntaxis:

svc.PrependRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*]

### Parameters:

array_2d: De matrix die al moet bestaan, maar wel leeg mag zijn. Als het een eendimensionale matrix is, dan wordt het gezien als de laatste kolom van de uiteindelijke tweedimensionale matrix.

row: Een eendimensionale matrix met net zoveel items als dat er kolommen zijn in array_2d.

### Voorbeeld:

        Dim a As Variant, b As variant
        a = SF_Array.PrependRow(Array(1, 2, 3), Array(4, 5, 6))
            ' ((4, 5, 6), (1, 2, 3))
        b = SF_Array.PrependRow(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(i, 0) ≡ i

## RangeInit

Initialiseert een nieuwe matrix met numerieke waardes.

### Syntaxis:

svc.RangeInit(from: num, upto: num, [bystep: num]): num[0..*]

### Parameters:

from: Waarde van het eerste item.

upto: Het laatste item mag niet hoger zijn dan de waarde van UpTo.

bystep: De stapgrootte (Standaardwaarde = 1).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.RangeInit(10, 1, -1)
            ' (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

## Reverse

Retourneert een omgekeerde eendimensionale matrix.

### Syntaxis:

svc.Reverse(array_1d: any[0..*]): any[0..*]

### Parameters:

array_1d: De om te keren matrix.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Reverse(Array("a", 2, 3, 4))
            ' (4, 3, 2, "a")

## Shuffle

Retourneert een eendimensionale matrix waarin de waardes willekeurig zijn verplaatst.

### Syntaxis:

svc.Shuffle(array_1d: any[0..*]): any[0..*]

### Parameters:

array_1d: De door elkaar te schudden matrix.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' Matrix  "a" is nu in willekeurige volgorde, bijvoorbeeld. (2, 3, 1, 4)

## Slice

Retourneert een deel van een eendimensionale matrix.

### Syntaxis:

svc.Slice(array_1d: any[0..*], from: int, [upto: int]): any[0..*]

### Parameters:

array_1d: De matrix waarvan een gedeelte moet worden gepakt.

from: De eerste index in array_1d van de submatrix waarvan een deel gepakt moet worden (inclusief from)

upto: De laatste index in array_1d van de submatrix waarvan een deel gepakt moet worden (inclusief upto). De standaardwaarde is de bovengrens van array_1d. Indien upto < from wordt er een lege matrix teruggegeven.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Slice(Array(1, 2, 3, 4, 5), 1, 3) ' (2, 3, 4)

## Sort

Sorteert een een dimensionale matrix oplopend of aflopend. Tekstvergelijkingen kunnen wel/niet hoofdlettergevoelig zijn.
De matrix moet hetzelfde type items bevatten.
Empty en Null items zijn niet toegestaan. Conventioneel is het zo dat Empty < Null < elke andere waarde.

### Syntaxis:

svc.Sort(array_1d: any[0..*], sortorder: str, casesensitive: bool = False): any[0..*]

### Parameters:

array_1d: De te sorteren matrix.

sortorder : Mogelijke waardes zijn "ASC" en "DESC". De standaardwaarde is "ASC".

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Sort(Array("a", "A", "b", "B", "C"), CaseSensitive := True)
            ' ("A", "B", "C", "a", "b")

## SortColumns

Retourneert een permutatie van de kolommen van een tweedimensionale matrix, gesorteerd op de waardes van een opgegeven rij.
De rij moet gevuld van met met waardes van hetzelfde type. Items met de waarde
Empty en Null zijn toegestaan. Conventioneel is het zo dat Empty < Null < elke andere waarde.

### Syntaxis:

svc.SortColumns(array_2d: any[0..*, 0..*], rowindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]

### Parameters:

array_2d: De te sorteren tweedimensionale matrix.

rowindex: De index van de rij die gebruikt wordt als referentie om de kolommen te sorteren.

sortorder : Mogelijke waardes zijn "ASC" en "DESC". De standaardwaarde is "ASC".

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

### Voorbeeld:

        ' arr = | 5, 7, 3 |
        '       | 1, 9, 5 |
        '       | 6, 1, 8 |
        Dim arr as Variant : arr = Array(5, 7, 3)
        arr = SF_Array.AppendRow(arr, Array(1, 9, 5))
        arr = SF_Array.AppendRow(arr, Array(6, 1, 8))
        arr = SF_Array.SortColumns(arr, 2, "ASC")
        ' arr = | 7, 5, 3 |
        '       | 9, 1, 5 |
        '       | 1, 6, 8 |

## SortRows

Retourneert een permutatie van de rijen van een tweedimensionale matrix, gesorteerd op de waardes van een opgegeven kolom.
De kolom moet gevuld van met met waardes van hetzelfde type. Items met de waarde
Empty en Null zijn toegestaan. Conventioneel is het zo dat Empty < Null < elke andere waarde.

### Syntaxis:

svc.SortRows(array_2d: any[0..*, 0..*], columnindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]

### Parameters:

array_2d: De te sorteren matrix.

columnindex: De index van de kolom die als referentie wordt gebruikt om de rijen te sorteren.

sortorder : Mogelijke waardes zijn "ASC" en "DESC". De standaardwaarde is "ASC".

casesensitive : Alleen voor het vergelijken van teksten (standaardwaarde is False).

### Voorbeeld:

        ' arr = | 5, 7, 3 |
        '       | 1, 9, 5 |
        '       | 6, 1, 8 |
        Dim arr as Variant : arr = Array(5, 7, 3)
        arr = SF_Array.AppendRow(arr, Array(1, 9, 5))
        arr = SF_Array.AppendRow(arr, Array(6, 1, 8))
        arr = SF_Array.SortRows(arr, 0, "ASC")
        ' arr = | 1, 9, 5 |
        '       | 5, 7, 3 |
        '       | 6, 1, 8 |

## Transpose

Wisselt rijen en kolommen in een tweedimensionale matrix.

### Syntaxis:

svc.Transpose(array_2d: any[0..*, 0..*]): any[0..*, 0..*]

### Parameters:

array_2d: De 2-dimensionale matrix om te transponeren.

### Voorbeeld:

        ' arr1 = | 1, 2 |
        '        | 3, 4 |
        '        | 5, 6 |
        arr1 = Array(1, 2)
        arr1 = SF_Array.AppendRow(arr1, Array(3, 4))
        arr1 = SF_Array.AppendRow(arr1, Array(5, 6))
        arr2 = SF_Array.Transpose(arr1)
        ' arr2 = | 1, 3, 5 |
        '        | 2, 4, 6 |
        MsgBox arr2(0, 2) ' 5

## TrimArray

Verwijdert alle Null, Leeg en lengteloze items uit een eendimensionale matrix.
Tekenreeksen worden bijgesneden met de functie LibreOffice Basic Trim().

### Syntaxis:

svc.TrimArray(array_1d: any[0..*]): any[0..*]

### Parameters:

array_1d: De bij te snijden matrix.

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.TrimArray(Array("A", "B", Null, " D "))
            ' ("A", "B", "D")

## Union

Maakt met de operator union van twee invoermatrixen een matrix. De items van beide matrixen worden in een matrix gezet, waarbij een item dat in beide voorkomt maar een keer in de matrix wordt gezet.
De uitvoermatrix is oplopend gesorteerd.
Beide matrix moeten items van hetzelfde type bevatten. De waardes Empty en Null zijn niet toegestaan.
U kunt aangeven of bij het vergelijken van teksten dit hoofdlettergevoelig moet zijn.

### Syntaxis:

svc.Union(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameters:

array1_1d: De eerste invoermatrix.

array2_1d: De tweede invoermatrix.

casesensitive : Alleen van toepassing als de matrixen teksten bevatten (standaardwaarde is False).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Union(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("A", "B", "C", "Z", "b")

## Unique

Maakt een set van unieke waardes uit de invoermatrix.
De matrix moet items van hetzelfde type bevatten. De waardes Empty en Null zijn niet toegestaan.
U kunt aangeven of bij het vergelijken van teksten dit hoofdlettergevoelig moet zijn.

### Syntaxis:

svc.Unique(array_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameters:

array_1d: De invoermatrix.

casesensitive : Alleen van toepassing als het matrix teksten bevat (standaardwaarde is False).

### Voorbeeld:

        Dim a As Variant
        a = SF_Array.Unique(Array("A", "C", "A", "b", "B"), CaseSensitive := True)
            '  ("A", "B", "C", "b")

Alle ScriptForge Basic-routines of variabelen die beginnen met een underscore "_" zijn voor intern gebruik. Gebruik deze niet in een Basic of Python-macro.

Verwante onderwerpen

Matrixfuncties

Calc-functies in macro's gebruiken

ScriptForge.Dictionary dienst

Help ons, alstublieft!