Usługa ScriptForge.Array

Udostępnia zbiór metod służących do manipulowania i przekształcania tablic jednego wymiaru (wektorów) i tablic dwuwymiarowych (macierzy). Obejmuje to operacje na zestawach, sortowanie, importowanie i eksportowanie do plików tekstowych.

Tablice o więcej niż dwóch wymiarach nie mogą być używane z metodami w tej usłudze, jedynym wyjątkiem jest metoda CountDims, która akceptuje tablice o dowolnej liczbie wymiarów.

Elementy tablicy mogą zawierać dowolny typ wartości, w tym (pod)tablice.

Wezwanie serwisu

Przed użyciem usługi Array należy załadować bibliotekę ScriptForge z:


    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
  

Załadowanie biblioteki spowoduje utworzenie obiektu SF_Array, który można użyć do wywołania metod w usłudze Array.

Poniższe fragmenty kodu przedstawiają różne sposoby wywoływania metod w usłudze Array (jako przykładu użyto metody Append):


    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)
  
warning

Ponieważ Python ma wbudowaną obsługę list i krotek, większość metod w usłudze Array jest dostępna tylko dla skryptów Basic. Jedynym wyjątkiem jest ImportFromCSVFile, który jest obsługiwany zarówno w języku Basic, jak i Python.


Lista metod w usłudze 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


tip

Pierwszym argumentem większości metod jest obiekt tablicy, który należy wziąć pod uwagę. Zawsze jest przekazywany przez referencję i pozostawiany bez zmian. Metody takie jak Append, Prepend itp. zwracają po wykonaniu nowy obiekt tablicy.


Append

Dołącza elementy wymienione jako argumenty na końcu tablicy wejściowej.

Składnia:

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

Parametry:

array_1d: istniejąca tablica może być pusta.

arg0, arg1, ...: elementy, które zostaną dołączone do array_1d.

Przykład:


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

AppendColumn

Dołącza nową kolumnę po prawej stronie tablicy dwuwymiarowej. Otrzymana tablica ma takie same dolne granice jak początkowa tablica dwuwymiarowa.

Składnia:

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

Parametry:

array_2d: istniejąca wcześniej tablica może być pusta. Jeśli ta tablica ma tylko jeden wymiar, jest uważana za pierwszą kolumnę wynikowej tablicy dwuwymiarowej.

column: jednowymiarowa tablica zawierająca tyle elementów, ile jest wierszy w array_2d.

Przykład:


    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

Dołącz nowy wiersz na dole dwuwymiarowej tablicy. Otrzymana tablica ma takie same dolne granice jak początkowa tablica dwuwymiarowa.

Składnia:

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

Parametry:

array_2d: istniejąca wcześniej tablica może być pusta. Jeśli ta tablica ma 1 wymiar, jest traktowana jako pierwszy wiersz wynikowej tablicy dwuwymiarowej.

row: jednowymiarowa tablica zawierająca tyle elementów, ile jest kolumn w array_2d.

Przykład:


    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

Sprawdź, czy jednowymiarowa tablica zawiera określoną liczbę, tekst lub datę. Porównanie tekstu może uwzględniać wielkość liter lub nie.
Posortowane tablice wejściowe muszą być wypełnione jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu (elementy Empty i Null są zabronione).
Rezultat metody jest nieprzewidywalny, gdy tablica jest ogłoszona jako posortowana, aw rzeczywis tości tak nie jest.
Wyszukiwanie binarne jest wykonywane, gdy tablica jest sortowana, w przeciwnym razie jest po prostu skanowana od góry do dołu, a elementy Empty i Null są ignorowane.

Składnia:

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

Parametry:

array_1d: tablica do przeskanowania.

tofind: liczba, data lub ciąg znaków do znalezienia.

casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).

sortorder: może to być "ASC", "DESC" lub "" (bez sortowania). Wartość domyślna to "".

Przykład:


    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

Przechowuj zawartość dwukolumnowej tablicy w obiekcie ScriptForge.Dictionary.
Klucz zostanie wyodrębniony z pierwszej kolumny, element z drugiej.

Składnia:

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

Parametry:

array_2d: dane do przekonwertowania na obiekt ScriptForge.Dictionary.

Przykład:


    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

Tworzy kopię jednowymiarowej lub dwuwymiarowej tablicy.

Składnia:

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

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

Parametry:

array_nd: jednowymiarowa lub dwuwymiarowa tablica do skopiowania.

Przykład:

Proste przypisanie obiektu Array spowoduje skopiowanie jego odwołania zamiast tworzenia kopii zawartości obiektu. Zobacz przykład poniżej:


    Dim a as Variant, b as Variant
    a = Array(1, 2, 3)
    ' Poniższe zadanie zostało wykonane przez odniesienie
    b = a
    ' Dlatego zmiana wartości w "b" zmieni również "a"
    b(0) = 10
    MsgBox a(0) ' 10
  

Za pomocą metody Copy tworzona jest kopia całego obiektu Array. W poniższym przykładzie a i b to różne obiekty, a zmiana wartości w b nie wpłynie na wartości w a.


    Dim a as Variant, b as Variant
    a = Array(1, 2, 3)
    ' Tworzy kopię "a" przy użyciu metody "Copy".
    b = SF_Array.Copy(a)
    b(0) = 10
    MsgBox a(0) ' 1
  

CountDims

Policz liczbę wymiarów tablicy. Wynik może być większy niż dwa.
Jeśli argument nie jest tablicą, zwraca -1
Jeśli tablica nie jest zainicjowana, zwraca 0.

Składnia:

svc.CountDims(array_nd: any): int

Parametry:

array_nd: tablica do sprawdzenia.

Przykład:


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

Difference

Stosuje operator różnicy do dwóch tablic wejściowych, tworząc zbiór jako tablicę zaczynającą się od 0. Wynikowe elementy pochodzą z pierwszej tablicy, a nie z drugiej.
Otrzymana tablica jest sortowana w porządku rosnącym.
Obie tablice wejściowe muszą być wypełnione jednorodnie, tzn. ich wpisy muszą być skalarami tego samego typu. Wartości Empty i Null są niedozwolone.
Porównania tekstu mogą uwzględniać wielkość liter lub nie.

Składnia:

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

Parametry:

array1_1d: jednowymiarowa tablica referencyjna, której elementy są sprawdzane pod kątem usunięcia.

tablica2_1d: jednowymiarowa tablica, której elementy są odejmowane od pierwszej tablicy wejściowej.

casesensitive: ten argument ma zastosowanie tylko wtedy, gdy tablice są wypełnione ciągami znaków (domyślnie = False).

Przykład:


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

ExportToTextFile

Zapisz kolejno wszystkie elementy tablicy do pliku tekstowego. Jeśli plik już istnieje, zostanie nadpisany bez ostrzeżenia.

Składnia:

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

Parametry:

array_1d: tablica do wyeksportowania. Musi zawierać tylko ciągi znaków.

filename: nazwa pliku tekstowego, w którym zostaną zapisane dane. Nazwa musi być wyrażona zgodnie z aktualną właściwością FileNaming usługi SF_FileSystem.

encoding: zestaw znaków, który powinien być używany. Użyj jednej z nazw wymienionych w zestawach znaków IANA. Należy pamiętać, że LibreOffice może nie implementować wszystkich istniejących zestawów znaków (domyślnie jest to "UTF-8").

Przykład:


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

ExtractColumn

Wyodrębnij z dwuwymiarowej tablicy określoną kolumnę jako nową tablicę.
Jej dolne LBound i górne UBound granice są identyczne z pierwszym wymiarem tablicy wejściowej.

Składnia:

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

Parametry:

array_2d: tablica, z której ma zostać wyodrębniona.

columnindex: numer kolumny do wyodrębnienia – musi mieścić się w przedziale [LBound, UBound].

Przykład:


    ' Tworzy macierz 3 × 3: |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))
    ' Wyodrębnia trzecią kolumnę: |3, 6, 9|
    col = SF_Array.ExtractColumn(mat, 2)
  

ExtractRow

Wyodrębnij z dwuwymiarowej tablicy określony wiersz jako nową tablicę.
Jego dolna granica LBound i górna UBound są identyczne z granicami drugiego wymiaru tablicy wejściowej.

Składnia:

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

Parametry:

array_2d: tablica, z której ma zostać wyodrębniona.

rowindex: numer wiersza do wyodrębnienia – musi mieścić się w przedziale [LBound, UBound].

Przykład:


    ' Tworzy macierz 3 × 3: |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))
    ' Wyodrębnia pierwszy wiersz: |1, 2, 3|
    row = SF_Array.ExtractRow(mat, 0)
  

Flatten

Ułóż wszystkie pojedyncze elementy tablicy i wszystkie elementy w jej podtablicach w jedną nową tablicę bez podtablic. Puste podtablice są ignorowane, a podtablice o liczbie wymiarów większej niż jeden nie są spłaszczane.

Składnia:

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

Parametry:

array_1d: istniejąca tablica może być pusta.

Przykład:


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

Możesz użyć metody Flatten wraz z innymi metodami, takimi jak Append lub Prepend, aby połączyć zestaw jednowymiarowych tablic w pojedynczą tablicę jednowymiarową.


Przykład:

Poniżej znajduje się przykład łączenia metod Flatten i Append w celu połączenia trzech tablic.


    ' Tworzy trzy tablice dla tego przykładu
    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)
    ' Łączy trzy tablice w jedną tablicę jednowymiarową
    Dim arr as Variant
    arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
    '(1, 2, 3, 4, 5, 6, 7, 8, 9)
  

ImportFromCSVFile

Zaimportuj dane zawarte w pliku z wartościami rozdzielanymi przecinkami (CSV). Przecinek można zastąpić dowolnym znakiem.

Obowiązujący format CSV jest opisany w artykule IETF Common Format and MIME Type for CSV Files.

Każda linia w pliku zawiera pełny rekord (podział linii nie jest dozwolony).
Jednakże sekwencje takie jak \n, \t, ... pozostają niezmienione. Użyj metody SF_String.Unescape(), aby nimi zarządzać.

Metoda zwraca dwuwymiarową tablicę, której wiersze odpowiadają pojedynczemu rekordowi odczytanemu w pliku, a kolumny odpowiadają polu rekordu. Nie sprawdza się spójności typów pól w kolumnach. Zostanie dokonane najlepsze odgadnięcie w celu zidentyfikowania typów liczbowych i dat.

Jeśli linia zawiera mniej lub więcej pól niż pierwsza linia w pliku, zostanie zgłoszony wyjątek. Puste linie są jednak po prostu ignorowane. Jeśli rozmiar pliku przekracza limit liczby elementów (patrz wewnątrz kodu), pojawia się ostrzeżenie i tablica jest obcinana.

Składnia:

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

Parametry:

filename: nazwa pliku tekstowego zawierającego dane. Nazwa musi być wyrażona zgodnie z aktualną właściwością FileNaming usługi SF_FileSystem.

delimiter: pojedynczy znak, zazwyczaj przecinek, średnik lub znak TAB (domyślnie = ",").

dateformat: specjalny mechanizm obsługuje daty, gdy dateformat to "YYYY-MM-DD", "DD-MM-YYYY" lub "MM-DD-YYYY". Dywiz (-) można zastąpić kropką (.), ukośnikiem (/) lub spacją. Inne formaty daty będą ignorowane. Daty z domyślną wartością pustego łańcucha "" są traktowane jako zwykły tekst.

Przykład:

Rozważ plik CSV "myFile.csv" o następującej zawartości:

Imię,DataUrodzenia,Adres,Miasto

Anna,2002.03.31,"Dworcowa 33", Wrocław

Fryderyk,1998.05.04,"Towarowa 13",Poznań

Poniższe przykłady w językach Basic i Python wczytują zawartość pliku CSV do obiektu Array.

W języku Basic

    Dim arr As Variant
    arr = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "YYYY/MM/DD")
    MsgBox arr(0, 3) ' Miasto
    MsgBox arr(1, 2) ' Dworcowa 33
    MsgBox arr(1, 3) ' Wrocław
  
W języku 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]) # Miasto
    bas.MsgBox(arr[1][2]) # Dworcowa 33
    bas.MsgBox(arr[1][3]) # Wrocław
  

IndexOf

Poszukaj w jednowymiarowej tablicy liczby, ciągu znaków lub daty. Porównanie tekstu może uwzględniać wielkość liter lub nie.
Jeśli tablica jest posortowana, musi być wypełniona jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu (elementy Empty i Null są zabronione).
Rezultat metody jest nieprzewidywalny, gdy tablica jest ogłaszana jako posortowana, a tak naprawdę nie jest.
Wyszukiwanie binarne jest wykonywane na posortowanych tablicach. W przeciwnym razie tablice są po prostu skanowane od góry do dołu, a elementy Empty i Null są ignorowane.

Metoda zwraca LBound(input array) - 1, jeśli wyszukiwanie nie powiodło się.

Składnia:

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

Parametry:

array_1d: tablica do przeskanowania.

tofind: liczba, data lub ciąg znaków do znalezienia.

casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).

sortorder: może to być "ASC", "DESC" lub "" (bez sortowania). Wartość domyślna to "".

Przykład:


    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

Wstaw przed danym indeksem tablicy wejściowej elementy wymienione jako argumenty.
Argumenty są wstawiane na ślepo. Każdy z nich może być skalarem dowolnego typu lub podtablicą.

Składnia:

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

Parametry:

array_1d: istniejąca tablica może być pusta.

before: indeks, przed którym należy wstawić; musi mieścić się w przedziale [LBound, UBound + 1].

arg0, arg1, ...: elementy, które zostaną wstawione do array_1d.

Przykład:


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

InsertSorted

Wstawia do posortowanej tablicy nowy element w jego miejsce.
Tablica musi być wypełniona jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu. Elementy
Empty i Null są zabronione.

Składnia:

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

Parametry:

array_1d: tablica, do której zostanie wstawiona wartość.

item: wartość skalarna do wstawienia, tego samego typu co istniejące elementy tablicy.

sortorder: może to być "ASC" (domyślnie) lub "DESC".

casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).

Przykład:


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

Intersection

Zbuduj zbiór jako tablicę od zera, stosując operator zbioru przecięcia na dwóch tablicach wejściowych. Wynikowe elementy są zawarte w obu tablicach.
Otrzymana tablica jest sortowana w porządku rosnącym.
Obie tablice wejściowe muszą być wypełnione jednorodnie, innymi słowy wszystkie elementy muszą być skalarami tego samego typu. Elementy Empty i Null są zabronione.
Porównanie tekstu może uwzględniać wielkość liter lub nie.

Składnia:

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

Parametry:

array1_1d: pierwsza tablica wejściowa.

array2_1d: druga tablica wejściowa.

casesensitive: dotyczy tablic wypełnionych elementami tekstowymi (domyślnie = False).

Przykład:


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

Join2D

Połącz dwuwymiarową tablicę z dwoma ogranicznikami, jednym dla kolumn, drugim dla wierszy.

Składnia:

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

Parametry:

array_2d: każdy element musi być tekstem, liczbą, datą lub wartością logiczną.
Daty są przekształcane do formatu YYYY-MM-DD hh:mm:ss.
Nieprawidłowe elementy są zastępowane łańcuchem o zerowej długości.

columndelimiter: ogranicza każdą kolumnę (domyślnie = Tab/Chr(9)).

rowdelimiter: ogranicza każdy wiersz (domyślnie = LineFeed/Chr(10))

quote: jeśli True, chroń ciągi za pomocą podwójnych cudzysłowów. Wartość domyślna to False.

Przykład:


    ' 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

Dołącz na początku tablicy wejściowej elementy wymienione jako argumenty.

Składnia:

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

Parametry:

array_1d: The pre-existing array, may be empty.

arg0, arg1, ...: A list of items to prepend to array_1d.

Przykład:


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

PrependColumn

Prepend to the left side of a two dimension array a new column. The resulting array has the same lower boundaries as the initial two dimension array.

Składnia:

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

Parametry:

array_2d: The pre-existing array, may be empty. If that array has 1 dimension, it is considered as the last column of the resulting 2 dimension array.

column: A 1-dimensional array with as many items as there are rows in array_2d.

Przykład:


    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

Prepend a new row at the beginning of a 2-dimensional array. The resulting array has the same lower boundaries as the initial 2-dimensional array.

Składnia:

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

Parametry:

array_2d: The pre-existing array, may be empty. If that array has 1 dimension, it is considered as the last row of the resulting 2-dimensional array.

row: A 1-dimensional array containing as many items as there are columns in array_2d.

Przykład:


    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

Initialize a new zero-based array with numeric values.

Składnia:

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

Parametry:

from: Value of the first item.

upto: The last item should not exceed UpTo.

bystep: The difference between two successive items (Default = 1).

Przykład:


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

Reverse

Return the reversed one dimension input array.

Składnia:

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

Parametry:

array_1d: The array to reverse.

Przykład:


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

Shuffle

Returns a random permutation of a one-dimensional array.

Składnia:

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

Parametry:

array_1d: The array to shuffle.

Przykład:


    Dim a As Variant
    a = SF_Array.Shuffle(Array(1, 2, 3, 4))
        ' Array "a" is now in random order, f.i. (2, 3, 1, 4)
  

Slice

Returns a subset of a one-dimensional array.

Składnia:

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

Parametry:

array_1d: The array to slice.

from: The lower index in array_1d of the subarray to extract (from included)

upto: The upper index in array_1d of the subarray to extract (upto included). The default value is the upper bound of array_1d. If upto < from then the returned array is empty.

Przykład:


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

Sort

Sort a one dimension array in ascending or descending order. Text comparisons can be case-sensitive or not.
The array must be filled homogeneously, which means that items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.

Składnia:

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

Parametry:

array_1d: The array to sort.

sortorder: It can be either "ASC" (default) or "DESC".

casesensitive: Only for string comparisons (Default = False).

Przykład:


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

SortColumns

Return a permutation of the columns of a two dimension array, sorted on the values of a given row.
The row must be filled homogeneously, which means that all items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.

Składnia:

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

Parametry:

array_2d: The 2-dimensional array to sort.

rowindex: The index of the row that will be used as reference to sort the columns.

sortorder: It can be either "ASC" (default) or "DESC".

casesensitive: Only for string comparisons (Default = False).

Przykład:


    ' 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

Return a permutation of the rows of a two dimension array, sorted on the values of a given column.
The column must be filled homogeneously, therefore all items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.

Składnia:

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

Parametry:

array_2d: The array to sort.

columnindex: The index of the column that will be used as reference to sort the rows.

sortorder: It can be either "ASC" (default) or "DESC".

casesensitive: Only for string comparisons (Default = False).

Przykład:


    ' 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

Swaps rows and columns in a two-dimensional array.

Składnia:

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

Parametry:

array_2d: The 2-dimensional array to transpose.

Przykład:


    ' 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

Remove from a one dimension array all Null, Empty and zero-length entries.
String items are trimmed with LibreOffice Basic Trim() function.

Składnia:

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

Parametry:

array_1d: The array to trim.

Przykład:


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

Union

Builds a set, as a zero-based array, by applying the union operator on the two input arrays. Resulting items originate from any of both arrays.
The resulting array is sorted in ascending order.
Both input arrays must be filled homogeneously, their items must be scalars of the same type. Empty and Null items are forbidden.
Text comparison can be case sensitive or not.

Składnia:

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

Parametry:

array1_1d: The first input array.

array2_1d: The second input array.

casesensitive: Applicable only if the arrays are populated with strings (Default = False).

Przykład:


    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

Build a set of unique values derived from the input array.
The input array must be filled homogeneously, its items must be scalars of the same type. Empty and Null items are forbidden.
Text comparison can be case sensitive or not.

Składnia:

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

Parametry:

array_1d: The input array.

casesensitive: Applicable only if the array is populated with strings (Default = False).

Przykład:


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

Wszystkie podstawowe procedury lub identyfikatory ScriptForge poprzedzone znakiem podkreślenia „_” są zarezerwowane do użytku wewnętrznego. Nie należy ich używać w makrach Basic ani skryptach Pythona.