Indhold

# ScriptForge.Array-tjeneste

Giver en samling metoder til at manipulere og transformere en-dimensions matrixer (vektorer) og to-dimensions matrixer (matrixer). Dette omfatter sæt-operationer, sortering, import fra og eksport til tekstfiler.

Matrixer med mere end to dimensioner kan ikke bruges med metoderne i denne tjeneste; den eneste udtagelse er metoden CountDims, der accepterer matrixer med et vilkårligt antal dimensioner.

Matrix-elementer kan indeholde enhver type værdi, herunder (under)matrixer.

## Kald af tjeneste

Før brug af tjenesten Array er det nødvendigt at hente biblioteket ScriptForge ved hjælp af:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Indlæsning af biblioteket vil oprette objektet SF_Array, der kan bruges til at kalde metoderne i tjenesten Array-

De følgende kodestumper viser de forskellige måder at kalde metoder i tjenesten Array på (metoden Append bruges som eksempel):

        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)

Fordi Python har en indbygget liste og understøttelse af tupler, findes de fleste af metoderne i tjenesten Array (Matrix) kun til Basic-scripts. Den eneste undtagelse er ImportFromCSVFile, som understøttes i både Basic og Python.

Liste over metoder i tjenesten 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

Det første argument i de fleste motoder er det matrix-objekt, der skal behandles. Det overleveres altid ved reference og lades uændret. Metoder som for eksempel Append, Prepend osv. returnerer et nyt matrix efter deres udførelse.

## Append

Tilføjer de oplistede elementer som argumenter i slutningen af input-matrixen.

### Syntaks:

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

### Parametre:

array_1d (matrix): Den allerede eksisterende matrix, kan være tom.

arg0, arg1, ...: Elementer, der bliver tilføjet til array_1d.

### Eksempel:

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

## AppendColumn

Tilføjer en ny kolonne på højre side i et to-dimensionelt matrix. De resulterende matrix har de samme nedre grænser som det oprindelige to-dimensionelle matrix.

### Syntaks:

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

### Parametre:

array_2d (matrix_2d): Den allerede eksisterende matrix, kan være tom. Hvis matrixen kun har en dimension, anses den som den første kolonne i den resulterende todimensionelle matrix.

column: Et 1-dimensionelt array med lige så mange elementer, som der er rækker i array_2d.

### Eksempel:

        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

Tilføj en ny række nederst nederst i en to-dimensionel matrix. Den resulterende matrix har de samme nedre grænser som den oprindelige to-dimensionelle matrix.

### Syntaks:

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

### Parametre:

matrix_2d: Den allerede eksisterende matrix, kan være tom. Hvis denne matrix har en dimension, anses den for at være den første række i den resulterende todimensionelle matrix.

række: En endimensionel matrix med så mange elementer, som der er kolonner i array_2d (den todimensionelle matrix).

### Eksempel:

        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

Tjek, om en endimensionel matrix indeholder et bestemt tal, tekst eller dato. Tekstsammenligningen kan skelne mellem Store og små bogstaver eller ikke.
Sorteret input-matrixer skal udfyldes homogent; det vil sige, at alle elementer skal være skalarer af den samme type (Tomme og Null-elementer er forbudt).
Metodens resultat er uforudsigelig, når matrixen annonceres som sorteret og faktisk ikke er det.
Der udføres en søgning, når matrixen er sorteret, ellers bliver den simpelthen skannet fra top til bund og elementerne Tom og Null ignoreres.

### Syntaks:

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

### Parametre:

array_1d: Den matrix, som skal scannes.

skal_findes: Et tal, en dato eller en streng, der skal findes.

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

sorteringsrækkefølge: Den kan være enten "ASC" (stigende), "DESC" (faldende) eller "" (ikke sorteret). Standardværdiern er "".

### Eksempel:

        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

Gem indholdet af en to-kolonners matrix i et ScriptForge.Dictionary-objekt.
Nøglen bliver trukket ud af den første kolonne, elementet fra den anden.

### Syntaks:

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

### Parametre:

Matrix_2d: Data, der skal konverteres til et ScriptForge.Dictionary-objekt.

- Den første kolonne må udelukkende indeholde strenge med en større længde end nul i vilkårlig orden. Disse værdier bliver brugt som etiketter i ordbogen.

- Den anden kolonne indeholder de data, der bliver knyttet til den tilsvarende etiket i ordbogen.

### Eksempel:

        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

Opretter en kopi af et en- eller todimensionelt array.

### Syntaks:

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

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

### Parametre:

array_nd: Det en- eller to-dimensionelle array, der skal kopieres.

### Eksempel:

En enkel tildeling af et Array (matrix)-objekt kopierer dens reference i stedet for at oprette en kopi af objektets indhold. Se eksemplet herunder:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Tildelingen herunder er oprettet med reference
        b = a
        ' Derfor vil ændring af "b" også ændre "a"
        b(0) = 10
        MsgBox a(0) ' 10

Ved brug af Copy (kopi)-metoden oprettes en kopi af hele Array (matrix)-objektet. I eksemplet herunder er a og b forskellige objekter og ændringer af værdierne i b påvirker ikke værdierne i a.

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Oprette en kopi af "a" med metoden "Copy"
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Tæl antallet af dimensioner i et array. Resultatet kan være større end to.
Hvis argumentet ikke er en matrix, returneres -1.
Hvis arrayet ikke er initialiseret, returneres 0.

### Syntaks:

svc.CountDims(array_nd: any): int

### Parametre:

array_nd: Det array, der skal undersøges.

### Eksempel:

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

## Difference

Byg mængde, som et array med 0 som første indeks, ved at anvende differens-operatoren på de to input-arrays. Resulterende elementer stammer fra det første array og ikkde det andet.
Det resulterende array er sorteret i stigende rækkefølge.
Begge input-arrays skal have homogent indhold: elementerne skal være enkeltværdier (skalarer) af den samme type. Tomme og Null-elementer er forbudt.
Nogle tekstsammenligninger skelner mellem store og små bogstaver, andre gør ikke.

### Syntaks:

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

### Parametre:

array1_1d: Et en-dimensionelt reference-array, hvis elementer undersøges til fjernelse.

array2_1d: Et en-dimensionelt array, hvis elementer trækkes fra den første input-matrix.

casesensitive (skelnen mellem store og små bogstaver): Dette argument er kun anvendeligt, hvis arrayene er udfyldt med strenge (standard = False (falsk)).

### Eksempel:

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

## ExportToTextFile

Skriv alle arrayets elementer efter hinanden til en tekstfil. Hvis filen allerede eksisterer, bliver den overskrevet uden advarsel.

### Syntaks:

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

### Parametre:

array_1d: Arrayet, som skal eksporteres. Må kun indeholde strenge.

filename: Navnet på den tekstfil, som data skal skrives til. Navnet skal udtrykkes i henhold til egenskaben FileNaming (filnavngivelse) i tjenesten SF_FileSystem.

encoding: Det tegnsæt, der skal bruges. Brug et af de navne, der er oplistet i IANA tegnsæt. Bemærk, at LibreOffice måske ikke implementerer alle eksisterende tegnsæt (Standard er "UTF-8").

### Eksempel:

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

## ExtractColumn

Udtræk en bestemt kolonne som en ny matrix fra en todimensionel matrix.
Dens nedre LBound og øvre UBound grænser er identiske med dem fra input-arrayets første dimension.

### Syntaks:

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

### Parametre:

array_2d: Det array, der skal udtrækkes fra.

columnindex: Den kolonne, der skal trækkes ud – skal ligge i intervallet [LBound, UBound] (nedre_grænse, øvre_grænse).

### Eksempel:

        'Opretter en 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))
        'Udtrækker den tredje kolonne: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Udtræk en bestemt række som et ny array fra et to-dimensionelt array.
Dens nedre LBound og øvre UBound grænser er identiske med dem i den anden dimension i input-arrayet.

### Syntaks:

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

### Parametre:

array_2d: Det array, der skal udtrækkes fra.

rowindex: det rækkenummer, der skal udtrækkes – skal ligge i intervallet [LBound, UBound] (nedre_grænse, øvre_grænse).

### Eksempel:

        'Opretter en 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))
        ' Udtrækker den første række: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Stak alle enkelte elementer i et array og alle elementer i dets underarrays ind i et nyt array uden underarrays. Tomme underarrays ignoreres og underarrays med et større antal dimensioner end 1 udflades ikke.

### Syntaks:

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

### Parametre:

array_1d: Den allerede eksisterende array, kan være tom.

### Eksempel:

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

Du kan bruge metoden Flatten sammen med andre metoder som for eksempel Append eller Prepend til at sammenkæde et sæt af 1D-arrays til et enkelt 1D-array.

### Eksempel:

Herefter er der et eksempel på, hvordan metoderne Flatten og Append kan kombineres til at sammenkæde tre arrays.

        ' Opretter tre arrays til dette eksempel
        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)
        ' Sammenkæder de tre arrays til et enkelt 1D-array
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Importér de data, der er indeholdt i en komma-separeret værdi-fil (CSV). Kommaet kan være erstattet af et vilkårligt tegn.

Det anvendelige CSV-format er beskrevet i IETF Common Format and MIME Type for CSV Files.

Hver linje i filen indeholder en komplet post (linjeopdeling er ikke tilladt).
Sekvenser som \n, \t ... efterlades imidlertid uændrede. Brug metoden SF_String.Unescape() til at håndtere dem.

Metoden returnerer et to-dimensionelt array, hvis rækker svarer til en enkelt post læst i filen og hvis kolonner svaret til et felt i posten. Der udføres ingen tjek af felttypernes sammenhæng hen over kolonner. Der gøres et bedste gæt på at identificere numeriske typer og dato-typer.

Hvis en linje indeholder færre eller flere felter en den første linje i filen, sættes et undtagelsesflag og arrayet afkortes. Hvis filstørrelsen overstiger grænsen for antallet af elementer (se inde i koden), skrives en advarsel og arrayet afkortes.

### Syntaks:

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

### Parametre:

filename: Navn på den fil, der indeholder dataene. Navnet skal udtrykkes i henhold til den aktuelle egenskab FileNaming (filnavngivelse) i tjenesten SF_FileSystem.

delimiter (skilletegn): Et enkelt tegn, sædvanligvis et komma, et semikolon eller et TAB-tegn (Standard = ",").

dateformat: En særlig mekanisme håndterer data, når dateformat er enten "ÅÅÅÅ-MM-DD", "DD-MM-ÅÅÅÅ" eller "MM-DD-ÅÅÅÅ". Tankestregen (-) kan erstattes med en prik (.), en skråstreg (/) eller et mellemrum. Andre datoformater bliver ignoreret. Datoer, der falder tilbage til en tom streng "" anses som almindelig tekst.

### Eksempel:

Betragt CSV-filen "min_fil.csv" med følgende indhold:

Navn,Fødselsdato,Adresse,By

Anna,2002/03/31,"Kirkegade 21",Tølløse

Frede,1998/05/04,"Albert Einsteins vej 113A",Carcassonne

Eksemplerne herunder i Basic og Python indlæser CSV-filens indhold i et Array-objekt.

##### I Basic

        Dim arr As Variant
        arr = SF_Array.ImportFromCSVFile("C:\Temp\min_fil.csv", DateFormat := "ÅÅÅÅ/MM/DD")
        MsgBox arr(0, 3) ' By
        MsgBox arr(1, 2) ' Kirkegade 21
        MsgBox arr(1, 3) ' Tølløse

##### I Python

        from scriptforge import CreateScriptService
        svc = CreateScriptService("Array")
        bas = CreateScriptService("Basic")
        arr = svc.ImportFromCSVFile(r"C:\Temp\min_fil.csv", dateformat = "ÅÅÅÅ/MM/DD")
        bas.MsgBox(arr[0][3]) # By
        bas.MsgBox(arr[1][2]) # Kirkegade 21
        bas.MsgBox(arr[1][3]) # Tølløse

## IndexOf

Se i en endimensionel matrix efter et tal, en streng eller en dato. Tekstsammenligning kan skelne mellem Store og små bogstaver eller ej.
Hvis arrayet er sorteret, skal det være homogent fyldt, hvilket betyder, at alle elementer skal være enkeltværdier (skalarer) af den samme type (elementerne Empty og Null er ikke tilladt).
Resultatet af metoden er uforudsigeligt, når arrayet annonceres som sorteret og faktisk ikke er det.
En binær søgning foretages på sorterede arrays. Ellers scannes arrays fra top til bund og elementerne Empty og Null ignorereres.
Metoden returnerer LBound(input array) -1, hvis søgningen ikke lykkedes.

### Syntaks:

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

### Parametre:

array_1d: Det array, der skal skannes.

tofind: Et tal, en dato eller en streng, der skal findes.

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

sortorder (sorteringsrækkefølge): Kan være enten "ASC" (stigende), "DESC" (faldende) eller "" (usorteret). Standardværdien er "".

### Eksempel:

        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

Indsæt de elementer, der er oplistet som argumenter, foran et givet indeks i input-arrayet.
Argumenter indsættes blindt. Hver af dem kan være enten en enkeltværdi (skalar) af vilkårlig type eller et underarray.

### Syntaks:

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

### Parametre:

array_1d: Det allerede eksisterende array, kan være tomt.

before: Indekset, som der skal indsættes foran; skal ligge i intervallet [LBound, UBound + 1] (nedre_grænse, øvre_grænse + 1).

arg0, arg1, ...: Elementer, der skal indsættes i array_1d.

### Eksempel:

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

## InsertSorted

Indsætter et nyt element på dets plads i et sorteret array.
Arrayet skal være homogent udfyldt, hvilket vil sige, at alle elementer skal være enkeltværdier (skalarer) af den samme type.
Elementerne Empty (tom) og Null (nul) er forbudte.

### Syntaks:

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

### Parametre:

array_1d: Det array, som værdien skal indsættes i.

item: den enkeltværdi (skalar), der skal indsættes, af den samme type som de eksisterende array-elementer.

sortorder (sorteringsrækkefølge): Kan være enten "ASC" (stigende) (standard) eller "DESC" (faldende).

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

### Eksempel:

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

## Intersection

Byg en mængde som et array, med 0 som første indeks, ved at anvende fællesmængde-operatoren på de to input-arrays. Resulterende elementer er dem som findes i begge arrays.
Det resultende array er sorteret i stigende rækkefølge.
Begge input-arrays skal have homogent indhold: elementerne skal være enkeltværdier (skalarer) af den samme type. Tomme og Null-elementer er forbudt.
Nogle tekstsammenligninger skelner mellem store og små bogstaver, andre gør ikke.

### Syntaks:

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

### Parametre:

array1_1d: De første input-array.

array2_1d: Det andet input-array.

casesensitive (skelnen mellem store og små bogstaver): Anvendes på arrays, fyldt med tekstelementer (standard = False (falsk)).

### Eksempel:

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

## Join2D

Sammenføj et todimensionelt array med to skilletegn, et skilletegn for kolonnerne, et skilletegn for rækkerne.

### Syntaks:

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

### Parametre:

array_2d: Hvert element skal være enten tekst, et tal, en dato eller en boolsk værdi.
Datoer ændres til formatet ÅÅÅÅ-MM-DD hh:mm:ss.
Ugyldige elementer erstattes af en nul-længde streng, "".

columndelimiter (kolonne-skilletegn): Adskiller mellem kolonner (standard = Tab/Chr(9)).

rowdelimiter (række-skilletegn): Adskiller mellem rækker (standard = LineFeed/Chr(10))

quote (citat): Hvis True (sand), beskyttes strenge med dobbelte anførselstegn. Standard er False (falsk).

### Eksempel:

        ' 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

Tilføj de oplistede elementer som argumenter i begyndelsen af input-arrayet.

### Syntaks:

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

### Parametre:

array_1d: Det allerede eksisterende array, kan være tom.

arg0, arg1, ...: En liste over elementer, der skal sættes forrest i array_1d.

### Eksempel:

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

## PrependColumn

Indføj en ny kolonne forrest i den venstre side af et to-dimensionelt array. Det resulterende array har de samme nedre grænser som det oprindelige todimensionelle array.

### Syntaks:

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

### Parametre:

array_2d: Det allerede eksisterende array, kan være tomt. Hvis dette array kun har 1 dimension, betragtes det som den sidste kolonne i det resulterende 2-dimensionelle array.

column: Et 1-dimensionelt array med lige så mange elementer, som der er rækker i array_2d.

### Eksempel:

        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

Tilføj en ny række i begyndelsen af et 2-dimensionelt array. Det resulterende array har den samme nedre grænse som det oprindelige 2-dimensionelle array.

### Syntaks:

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

### Parametre:

array_2d: Det allerede eksisterende array, kan være tomt. Hvis dette array kun har 1 dimension, betragtes det som den sidste række t den resulterende 2-dimensionelle array.

row: Et 1-dimensionelt array, der indeholder ligeså mange elementer som der er kolonner i array_2d.

### Eksempel:

        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

Initialiser et ny array med 0 som første indeks, med numeriske værdier.

### Syntaks:

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

### Parametre:

from (fra): Værdien af det første element.

up_to (op_ til): Det sidste element bør ikke overstige upto.

bystep (i_trin): Forskellen mellem to på hinanden følgende elementer (standard = 1)

### Eksempel:

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

## Reverse

Returner det omvendte endimensionelle input-array.

### Syntaks:

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

### Parametre:

array_1d: Det array, der skal vendes om.

### Eksempel:

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

## Shuffle

Returnerer en tilfældig permutation af et 1-dimensionelt array.

### Syntaks:

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

### Parametre:

array_1d: Det array, der skal blandes,

### Eksempel:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' Array "a" er nu i tilfældig orden, fx (2, 3, 1, 4)

## Slice

Returnerer en delmængde af et 1-dimensionelt array.

### Syntaks:

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

### Parametre:

array_1d: Det array, som skal opdeles.

from (fra): Det nedre indeks i array_1d af det under-array, der skal uddrages (from inkluderet)

upto (op_til): Det øvre indeks i array_1d af det under-array, der skal uddrages (upto (op_til) medregnet). Standardværdien er øvre grænse af array_1d. Hvis upto < from er det returnerede array tomt.

### Eksempel:

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

## Sort

Sortér et 1-dimensionelt array i stigende eller faldende rækkefølge. Tekstsammenligninger kan skelne mellem Store og små bogstaver eller ikke.
Arrayet skal være homogent fyldt, hvilket betyder, at elementerne skal være den samme type enkeltværdier (skalarer).
Elementerne Empty og Null er tilladt. Traditionelt er Empty < Null < enhver anden skalar værdi.

### Syntaks:

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

### Parametre:

array_1d: Det array, der skal sorteres.

sortorder (sorteringsrækkefølge): Kan være enten "ASC" (stigende) (standard) eller "DESC" (faldende).

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

### Eksempel:

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

## SortColumns

Returner en permutation af kolonner i et todimensionelt array, sorteret efter værdierne i en given række.
Rækken skal være homogent fyldt, det vil sige, at alle elementer skal være enkeltværdier (skalarer) af den samme type.
Elementerne Empty og Null er tilladte. Traditionelt er Empty < Null < enhver anden skalar værdi..

### Syntaks:

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

### Parametre:

array_2d: Det 2-dimensionelle array, der skal sorteres.

rowindex (rækkeindeks): Indekset for den række, der bliver brugt som reference til sortering af kolonner.

sortorder (sorteringsrækkefølge): Kan være enten "ASC" (stigende) (standard) eller "DESC" (faldende).

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

### Eksempel:

        ' 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

Returner en permutation af rækker i et todimensionelt array, sorteret efter værdierne i en given kolonne.
kolonnen skal være homogent fyldt, derfor skal alle elementer være enkeltværdier (skalarer) af den samme type.
Elementerne Empty og Null er tilladt, Traditionelt er Empty < Null < enhver anden skalar værdi.

### Syntaks:

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

### Parametre:

array_2d: Det array, der skal sorteres.

columnindex (kolonneindeks): Indekset for den kolonne, der skal bruges som reference for sortering af rækkerne.

sortorder (sorteringsrækkefølge): Kan være enten "ASC" (stigende) (standard) eller "DESC" (faldende).

casesensitive (skelnen mellem store og små bogstaver): Kun ved strengsammenligninger (standard = False (falsk)).

### Eksempel:

        ' 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

Ombytter rækker og kolonner i et 2-dimensionelt array.

### Syntaks:

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

### Parametre:

array_2d: Det 2-dimensionelle array, der skal transponeres.

### Eksempel:

        ' 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

Fjern alle Null, Empty og nul-længde-elementer fra et 1-dimensionelt array.
Strengelementer trimmes med LibreOffice Basic Trim()-funktionen.

### Syntaks:

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

### Parametre:

array_1d: Det array, der skal beskæres.

### Eksempel:

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

## Union

Byg en mængde som et array, med 0 som første indeks, ved at anvende foreningsmængde-operatoren på de to input-arrays. Resulterende elementer er dem som findes i mindst det ene af de to arrays.
Det resultende array er sorteret i stigende rækkefølge.
Begge input-arrays skal have homogent indhold: elementerne skal være enkeltværdier (skalarer) af den samme type. Tomme og Null-elementer er forbudt.
Nogle tekstsammenligninger skelner mellem store og små bogstaver, andre gør ikke.

### Syntaks:

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

### Parametre:

array1_1d: Det første input-array.

array2_1d: Det andet input-array.

casesensitive (skelnen mellem store og små bogstaver): Kun anvendelig, hvis arrayene er fyldt med strenge (standard = False (falsk)).

### Eksempel:

        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

Byg en mængde af unikke værdier, afledt fra input-arrayet.
Input-arrayet skal have homogent indhold: elementerne skal være enkeltværdier (skalarer) af den samme type. Elementerne Empty og Null er ikke tilladt.
Nogle tekstsammenligninger skelner mellem store og små bogstaver, andre gør ikke.

### Syntaks:

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

### Parametre:

array_1d: Input-arrayet.

casesensitive (skelnen mellem store og små bogstaver): Kun anvendelig, hvis arrayet er fyldt med strenge (standard = False (falsk)).

### Eksempel:

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

Alle ScriptForge Basic-rutiner eller identifikatorer, der indledes med et understregstegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.

Relaterede emner

Matrice-funktioner

Brug af Calc-funktioner i makroer

Tjenesten ScriptForge.Ordbog