Περιεχόμενα

# ScriptForge.Υπηρεσία Πίνακας

Παρέχει μια συλλογή μεθόδων για το χειρισμό και τον μετασχηματισμό πινάκων μιας διάστασης (διανύσματα) και πινάκων δύο διαστάσεων (πίνακες). Αυτό περιλαμβάνει πράξεις συνόλων, ταξινόμηση, εισαγωγή από και εξαγωγή σε αρχεία κειμένου.

Πίνακες με περισσότερες από δύο διαστάσεις δεν μπορούν να χρησιμοποιηθούν με τις μεθόδους αυτής της υπηρεσίας, η μόνη εξαίρεση είναι η μέθοδος CountDims που δέχεται Πίνακες με οποιονδήποτε αριθμό διαστάσεων.

Τα στοιχεία πίνακα μπορεί να περιέχουν οποιονδήποτε τύπο τιμής, συμπεριλαμβανομένων (υπο)πινάκων.

## Κλήση υπηρεσίας

Πριν χρησιμοποιήσετε την υπηρεσία Array, η βιβλιοθήκη ScriptForge πρέπει να φορτωθεί χρησιμοποιώντας:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Η φόρτωση της βιβλιοθήκης θα δημιουργήσει το αντικείμενο SF_Array που μπορεί να χρησιμοποιηθεί για την κλήση των μεθόδων στην υπηρεσία Array.

Τα παρακάτω αποσπάσματα κώδικα δείχνουν τους διάφορους τρόπους κλήσης μεθόδων στην υπηρεσία Array (η μέθοδος 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)

Επειδή η Python διαθέτει ενσωματωμένη υποστήριξη καταλόγου και πλειάδας, οι περισσότερες από τις μεθόδους στην υπηρεσία Array είναι διαθέσιμες μόνο για σενάρια Basic. Η μόνη εξαίρεση είναι το ImportFromCSVFile το οποίο υποστηρίζεται τόσο σε Basic όσο και σε Python.

Κατάλογος μεθόδων στην υπηρεσία 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

Το πρώτο όρισμα των περισσότερων μεθόδων είναι το αντικείμενο του πίνακα που πρέπει να ληφθεί υπόψη. Περνιέται πάντα με αναφορά και αφήνεται αμετάβλητο. Μέθοδοι όπως Append, Prepend κ.λπ. επιστρέφουν ένα νέο αντικείμενο πίνακα μετά την εκτέλεσή τους.

## Append

Προσθέτει τα στοιχεία που παρατίθενται ως ορίσματα στο τέλος του πίνακα εισόδου.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός.

arg0, arg1, ...: Στοιχεία που θα προστεθούν στο array_1d.

### Παράδειγμα:

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

## AppendColumn

Προσθέτει μια νέα στήλη στη δεξιά πλευρά ενός δισδιάστατου πίνακα. Ο πίνακας που προκύπτει έχει τα ίδια κάτω όρια με τον αρχικό δισδιάστατο πίνακα.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός. Εάν αυτός ο πίνακας έχει μόνο μία διάσταση, θεωρείται ως η πρώτη στήλη του δισδιάστατου πίνακα που προκύπτει.

στήλη: Ένας μονοδιάστατος πίνακας με τόσα στοιχεία όσες υπάρχουν σειρές στον array_2d.

### Παράδειγμα:

        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

Προσθέστε στο κάτω μέρος ενός πίνακα δύο διαστάσεων μια νέα σειρά. Ο πίνακας που προκύπτει έχει τα ίδια κάτω όρια με τον αρχικό πίνακα δύο διαστάσεων.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός. Εάν αυτός ο πίνακας έχει 1 διάσταση, θεωρείται ως η πρώτη σειρά του πίνακα 2 διαστάσεων που προκύπτει.

σειρά: Ένας μονοδιάστατος πίνακας με τόσα στοιχεία όσες στήλες υπάρχουν στον array_2d.

### Παράδειγμα:

        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

Ελέγξτε εάν ένας πίνακας μιας διάστασης περιέχει έναν συγκεκριμένο αριθμό, κείμενο ή ημερομηνία. Η σύγκριση κειμένου μπορεί να είναι με διάκριση πεζών-κεφαλαίων ή όχι.
Οι ταξινομημένοι πίνακες εισόδου πρέπει να γεμίζονται ομοιογενώς, πράγμα που σημαίνει ότι όλα τα στοιχεία πρέπει να είναι βαθμίδες του ίδιου τύπου (τα στοιχεία Empty και Null απαγορεύονται).
Το αποτέλεσμα της μεθόδου είναι απρόβλεπτο όταν ο πίνακας ανακοινώνεται ως ταξινομημένος και στην πραγματικότητα δεν είναι.
Γίνεται μια δυαδική αναζήτηση όταν ταξινομηθεί ο πίνακας, διαφορετικά, απλώς σαρώνεται από πάνω προς τα κάτω και τα στοιχεία Empty και Null αγνοούνται.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για σάρωση.

προς_εύρεση (tofind): Ένας αριθμός, μια ημερομηνία ή μια συμβολοσειρά για εύρεση.

διάκριση πεζών-κεφαλαίων: Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

ταξινομητής (sortorder): Μπορεί να είναι είτε "ASC" (αύξουσα), "DESC" (φθίνουσα) ή "" (χωρίς ταξινόμηση). Η προεπιλεγμένη τιμή είναι "".

### Παράδειγμα:

        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

Αποθηκεύστε το περιεχόμενο ενός πίνακα 2 στηλών σε ένα αντικείμενο ScriptForge.Dictionary.
Το κλειδί θα εξαχθεί από την πρώτη στήλη και το στοιχείο από τη δεύτερη.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Δεδομένα που θα μετατραπούν σε αντικείμενο ScriptForge.Dictionary.

- Η πρώτη στήλη πρέπει να περιέχει αποκλειστικά συμβολοσειρές με μήκος μεγαλύτερο του μηδέν, με οποιαδήποτε σειρά. Αυτές οι τιμές θα χρησιμοποιηθούν ως ετικέτες στο λεξικό.

- Η δεύτερη στήλη περιέχει τα δεδομένα που θα συσχετιστούν με την αντίστοιχη ετικέτα στο λεξικό.

### Παράδειγμα:

        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

Δημιουργεί ένα αντίγραφο ενός πίνακα 1Δ ή 2Δ.

### Σύνταξη:

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

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

### Παράμετροι:

array_nd: Ο πίνακας 1Δ ή 2Δ που πρόκειται να αντιγραφεί.

### Παράδειγμα:

Μια απλή ανάθεση ενός αντικειμένου Array θα αντιγράψει την αναφορά του αντί να δημιουργήσει ένα αντίγραφο των περιεχομένων του αντικειμένου. Δείτε το παρακάτω παράδειγμα:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Η παρακάτω ανάθεση γίνεται με αναφορά
        b = a
        ' Ως εκ τούτου, η αλλαγή των τιμών στο "b" θα αλλάξει επίσης το "a"
        b(0) = 10
        MsgBox a(0) ' 10

Χρησιμοποιώντας τη μέθοδο Copy, δημιουργείται ένα αντίγραφο ολόκληρου του αντικειμένου Array. Στο παρακάτω παράδειγμα, τα a και b είναι διαφορετικά αντικείμενα και η αλλαγή των τιμών στο b δεν θα επηρεάσει τις τιμές στο a .

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Δημιουργεί ένα αντίγραφο του "a" χρησιμοποιώντας τη μέθοδο "Copy".
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Μέτρηση του αριθμού των διαστάσεων ενός πίνακα. Το αποτέλεσμα μπορεί να είναι μεγαλύτερο από δύο.
Εάν το όρισμα δεν είναι πίνακας, επιστρέφει -1
Εάν ο πίνακας δεν είναι αρχικοποιημένος, επιστρέφει 0.

### Σύνταξη:

svc.CountDims(array_nd: any): int

### Παράμετροι:

array_nd: Ο πίνακας προς εξέταση.

### Παράδειγμα:

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

## Difference

Δημιουργήστε ένα σύνολο, ως πίνακα μηδενικής βάσης, εφαρμόζοντας τον τελεστή διαφοράς στους δύο πίνακες εισόδου. Τα στοιχεία που προκύπτουν προέρχονται από τον πρώτο πίνακα και όχι από τον δεύτερο.
Ο πίνακας που προκύπτει ταξινομείται με αύξουσα σειρά.
Και οι δύο πίνακες εισόδου πρέπει να συμπληρωθούν ομοιογενώς, τα στοιχεία τους πρέπει να είναι βαθμωτά του ίδιου τύπου. Τα στοιχεία Empty και Null απαγορεύονται.
Η σύγκριση κειμένου μπορεί να κάνει διάκριση πεζών-κεφαλαίων ή όχι.

### Σύνταξη:

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

### Παράμετροι:

array1_1d: Ένας μονοδιάστατος πίνακας αναφοράς, του οποίου τα στοιχεία εξετάζονται για κατάργηση.

array2_1d: Ένας μονοδιάστατος πίνακας, του οποίου τα στοιχεία αφαιρούνται από τον πρώτο πίνακα εισόδου.

casesensitive (διάκριση πεζών-κεφαλαίων): Αυτό το όρισμα ισχύει μόνο εάν οι πίνακες είναι συμπληρωμένοι με συμβολοσειρές (Προεπιλογή = False).

### Παράδειγμα:

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

## ExportToTextFile

Γράψτε όλα τα στοιχεία του πίνακα διαδοχικά σε ένα αρχείο κειμένου. Εάν το αρχείο υπάρχει ήδη, θα αντικατασταθεί χωρίς προειδοποίηση.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας προς εξαγωγή. Πρέπει να περιέχει μόνο συμβολοσειρές.

filename (όνομα αρχείου): Το όνομα του αρχείου κειμένου στο οποίο θα εγγραφούν τα δεδομένα. Το όνομα πρέπει να εκφράζεται σύμφωνα με την τρέχουσα ιδιότητα FileNaming της υπηρεσίας SF_FileSystem.

encoding (κωδικοποίηση): Το σύνολο χαρακτήρων που πρέπει να χρησιμοποιηθεί. Χρησιμοποιήστε ένα από τα ονόματα που αναφέρονται στα σύνολα χαρακτήρων IANA. Σημειώστε ότι το LibreOffice ενδέχεται να μην εφαρμόσει όλα τα υπάρχοντα σύνολα χαρακτήρων (Η προεπιλογή είναι "UTF-8").

### Παράδειγμα:

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

## ExtractColumn

Εξαγωγή από έναν πίνακα δύο διαστάσεων μιας συγκεκριμένης στήλης ως νέου πίνακα.
Τα κατώτερα LBound και τα ανώτερα όρια UBound είναι ταυτόσημα με αυτά της πρώτης διάστασης του πίνακα εισόδου.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο πίνακας από τον οποίο γίνεται η εξαγωγή.

columnindex (δείκτης στήλης): Ο αριθμός στήλης προς εξαγωγή - πρέπει να βρίσκεται στο διάστημα [LBound, UBound].

### Παράδειγμα:

        'Δημιουργεί μια μήτρα 3x3: |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))
        'Εξάγει την τρίτη στήλη: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Εξαγωγή από έναν πίνακα δύο διαστάσεων μιας συγκεκριμένης σειράς ως νέου πίνακα.
Τα κατώτερα LBound και τα ανώτερα όρια UBound είναι ταυτόσημα με αυτά της δεύτερης διάστασης του πίνακα εισόδου.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο πίνακας από τον οποίο γίνεται η εξαγωγή.

rowindex (δείκτης_σειράς): Ο αριθμός σειράς προς εξαγωγή - πρέπει να βρίσκεται στο διάστημα [LBound, UBound].

### Παράδειγμα:

        'Δημιουργεί μια μήτρα 3x3: |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))
        'Εξάγει την πρώτη σειρά: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Στοιβάξτε όλα τα μεμονωμένα στοιχεία ενός πίνακα και όλα τα στοιχεία στους υποπίνακες του σε έναν νέο πίνακα χωρίς υποπίνακες. Οι κενές υποσυστοιχίες αγνοούνται και οι υποσυστοιχίες με αριθμό διαστάσεων μεγαλύτερο από ένα δεν ισοπεδώνονται.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός.

### Παράδειγμα:

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

Μπορείτε να χρησιμοποιήσετε τη μέθοδο Flatten μαζί με άλλες μεθόδους, όπως Append ή Prepend για να συνενώσετε ένα σύνολο από πίνακες 1Δ σε έναν μόνο πίνακα 1Δ.

### Παράδειγμα:

Ακολουθεί ένα παράδειγμα του τρόπου με τον οποίο οι μέθοδοι Flatten και Append μπορούν να συνδυαστούν για να συνενώσουν τρεις πίνακες.

        'Δημιουργεί τρεις πίνακες για αυτό το παράδειγμα
        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)
        'Συνενώνει τους τρεις πίνακες σε έναν ενιαίο πίνακα 1Δ
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Εισαγωγή των δεδομένων που περιέχονται σε ένα αρχείο τιμών διαχωρισμένων με κόμματα (CSV). Το κόμμα μπορεί να αντικατασταθεί από οποιονδήποτε χαρακτήρα.

Η ισχύουσα μορφή CSV περιγράφεται στο Κοινή μορφή IETF και Τύπος MIME για αρχεία CSV.

Κάθε γραμμή στο αρχείο περιέχει μια πλήρη εγγραφή (δεν επιτρέπεται ο διαχωρισμός γραμμής).
Ωστόσο, ακολουθίες όπως \n, \t, ... παραμένουν αμετάβλητες. Χρησιμοποιήστε τη μέθοδο SF_String.Unescape() για να τα διαχειριστείτε.

Η μέθοδος επιστρέφει έναν πίνακα δύο διαστάσεων του οποίου οι σειρές αντιστοιχούν σε μια μεμονωμένη εγγραφή που διαβάζεται στο αρχείο και του οποίου οι στήλες αντιστοιχούν σε ένα πεδίο της εγγραφής. Δεν πραγματοποιείται έλεγχος σχετικά με τη συνοχή των τύπων πεδίων στις στήλες. Θα γίνει μια καλύτερη εικασία για τον εντοπισμό αριθμητικών τύπων και τύπων ημερομηνίας.

Εάν μια γραμμή περιέχει λιγότερα ή περισσότερα πεδία από την πρώτη γραμμή του αρχείου, θα δημιουργηθεί μια εξαίρεση. Ωστόσο, οι κενές γραμμές απλώς αγνοούνται. Εάν το μέγεθος του αρχείου υπερβαίνει το όριο του αριθμού των στοιχείων (δείτε μέσα στον κώδικα), εμφανίζεται μια προειδοποίηση και ο πίνακας περικόπτεται.

### Σύνταξη:

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

### Παράμετροι:

filename (όνομα αρχείου): Το όνομα του αρχείου κειμένου που περιέχει τα δεδομένα. Το όνομα πρέπει να εκφράζεται σύμφωνα με την τρέχουσα ιδιότητα FileNaming της υπηρεσίας SF_FileSystem.

delimiter (οριοθέτης): Ένας μεμονωμένος χαρακτήρας, συνήθως, ένα κόμμα, ένα ερωτηματικό ή ένας χαρακτήρας TAB (Προεπιλογή = ",").

dateformat (μορφή ημερομηνίας): Ένας ειδικός μηχανισμός χειρίζεται ημερομηνίες όταν η dateformat είναι είτε "ΕΕΕΕ-ΜΜ-ΗΗ", "ΗΗ-ΜΜ-ΕΕΕΕ" ή "ΜΜ-ΗΗ-ΕΕΕΕ". Η παύλα (-) μπορεί να αντικατασταθεί από μια τελεία (.), μια κάθετο (/) ή ένα κενό. Άλλες μορφές ημερομηνίας θα αγνοηθούν. Οι ημερομηνίες που είναι προεπιλεγμένες σε μια κενή συμβολοσειρά "" θεωρούνται ως κανονικό κείμενο.

### Παράδειγμα:

Εξετάστε το αρχείο CSV "myFile.csv" με τα ακόλουθα περιεχόμενα:

Όνομα, ΗμερομηνίαΓέννησης, Διεύθυνση, Πόλη

Άννα, 31/03/2002, "Οδός Εκκλησίας, 21", Τουλούζ

Φρεντ, 04/05/1998, "Οδός Αλβέρτου Αϊνστάιν, 113Α", Καρκασόν

Τα παρακάτω παραδείγματα σε Basic και Python διαβάζουν τα περιεχόμενα του αρχείου CSV σε ένα αντικείμενο Array.

##### Σε Basic

        Dim arr As Variant
        arr = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "ΗΗ/ΜΜ/ΕΕΕΕ")
        MsgBox arr(0, 3) ' Πόλη
        MsgBox arr(1, 2) ' Οδός Εκκλησίας, 21
        MsgBox arr(1, 3) ' Τουλούζ

##### Σε Python

        from scriptforge import CreateScriptService
        svc = CreateScriptService("Array")
        bas = CreateScriptService("Basic")
        arr = svc.ImportFromCSVFile(r"C:\Temp\myFile.csv", dateformat = "ΗΗ/ΜΜ/ΕΕΕΕ")
        bas.MsgBox(arr[0][3]) # Πόλη
        bas.MsgBox(arr[1][2]) # Οδός Εκκλησίας, 21
        bas.MsgBox(arr[1][3]) # Τουλούζ

## IndexOf

Ψάξτε σε έναν πίνακα μιας διάστασης για έναν αριθμό, μια συμβολοσειρά ή μια ημερομηνία. Η σύγκριση κειμένου μπορεί να είναι με διάκριση πεζών-κεφαλαίων ή όχι.
Εάν ο πίνακας είναι ταξινομημένος, πρέπει να συμπληρωθεί ομοιογενώς, πράγμα που σημαίνει ότι όλα τα στοιχεία πρέπει να είναι βαθμίδες του ίδιου τύπου (τα στοιχεία Empty και Null απαγορεύονται).
Το αποτέλεσμα της μεθόδου είναι απρόβλεπτο όταν ο πίνακας ανακοινώνεται ως ταξινομημένος και στην πραγματικότητα δεν είναι.
Εκτελείται δυαδική αναζήτηση σε ταξινομημένους πίνακες. Διαφορετικά, οι πίνακες απλώς σαρώνονται από πάνω προς τα κάτω και τα στοιχεία Empty και Null αγνοούνται.
Η μέθοδος επιστρέφει LBound(input array) - 1 εάν η αναζήτηση δεν ήταν επιτυχής.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για σάρωση.

tofind (προς_εύρεση): Ένας αριθμός, μια ημερομηνία ή μια συμβολοσειρά για εύρεση.

casesensitive (διάκριση πεζών-κεφαλαίων): Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

sortorder (ταξινομητής): Μπορεί να είναι είτε "ASC" (αύξουσα), "DESC" (φθίνουσα) ή "" (χωρίς ταξινόμηση). Η προεπιλεγμένη τιμή είναι "".

### Παράδειγμα:

        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

Εισαγάγετε πριν από ένα δεδομένο ευρετήριο του πίνακα εισόδου τα στοιχεία που αναφέρονται ως ορίσματα.
Τα ορίσματα εισάγονται τυφλά. Κάθε ένα από αυτά μπορεί να είναι είτε βαθμωτά οποιουδήποτε τύπου είτε υποπίνακας.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός.

before (πριν): Το ευρετήριο πριν από το οποίο θα εισαχθεί. Πρέπει να βρίσκεται στο διάστημα [LBound, UBound + 1].

arg0, arg1, ...: Στοιχεία που θα εισαχθούν στο array_1d.

### Παράδειγμα:

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

## InsertSorted

Εισάγει σε έναν ταξινομημένο πίνακα ένα νέο στοιχείο στη θέση του.
Ο πίνακας πρέπει να συμπληρωθεί ομοιογενώς, πράγμα που σημαίνει ότι όλα τα στοιχεία πρέπει να είναι βαθμωτά του ίδιου τύπου
. Τα στοιχεία Empty και Null απαγορεύονται.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας στον οποίο θα εισαχθεί η τιμή.

item (στοιχείο): Η βαθμωτή τιμή που θα εισαχθεί, του ίδιου τύπου με τα υπάρχοντα στοιχεία πίνακα.

sortorder (ταξινομητής): Μπορεί να είναι είτε "ASC" (προεπιλογή) (αύξουσα) ή "DESC" (φθίνουσα).

casesensitive (διάκριση πεζών-κεφαλαίων): Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

### Παράδειγμα:

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

## Intersection

Δημιουργήστε ένα σύνολο, ως πίνακα μηδενικής βάσης, εφαρμόζοντας τον τελεστή συνόλου τομής στους δύο πίνακες εισόδου. Τα στοιχεία που προκύπτουν περιέχονται και στους δύο πίνακες.
Ο πίνακας που προκύπτει ταξινομείται με αύξουσα σειρά.
Και οι δύο πίνακες εισόδου πρέπει να συμπληρωθούν ομοιογενώς, με άλλα λόγια όλα τα στοιχεία πρέπει να είναι βαθμωτά του ίδιου τύπου. Τα στοιχεία Empty και Null απαγορεύονται.
Η σύγκριση κειμένου μπορεί να κάνει διάκριση πεζών-κεφαλαίων ή όχι.

### Σύνταξη:

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

### Παράμετροι:

array1_1d: Ο πρώτος πίνακας εισόδου.

array2_1d: Ο δεύτερος πίνακας εισόδου.

casesensitive (διάκριση πεζών-κεφαλαίων): Ισχύει για πίνακες που συμπληρώνονται με στοιχεία κειμένου (Προεπιλογή = False).

### Παράδειγμα:

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

## Join2D

Συνδέστε έναν δισδιάστατο πίνακα με δύο οριοθέτες, έναν για τις στήλες και έναν για τις σειρές.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Κάθε στοιχείο πρέπει να είναι είτε κείμενο, αριθμός, ημερομηνία ή Μπουλ.
Οι ημερομηνίες μετατρέπονται στη μορφή ΕΕΕΕ-ΜΜ-ΗΗ ωω:λλ:δδ.
Τα μη έγκυρα στοιχεία αντικαθίστανται από μια συμβολοσειρά μηδενικού μήκους.

columndelimiter (οριοθέτης στήλης): Οριοθετεί κάθε στήλη (προεπιλογή = Tab/Chr(9)).

rowdelimiter (οριοθέτης σειράς): Οριοθετεί κάθε σειρά (προεπιλογή = LineFeed/Chr(10))

quote (εισαγωγικό): Εάν True, προστατέψτε τις συμβολοσειρές με διπλά εισαγωγικά. Η προεπιλογή είναι False.

### Παράδειγμα:

        ' 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

Προσθέστε στην αρχή του πίνακα εισόδου τα στοιχεία που αναφέρονται ως ορίσματα.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός.

arg0, arg1, ...: Ένας κατάλογος στοιχείων που θα προστεθούν στο array_1d.

### Παράδειγμα:

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

## PrependColumn

Προσαρτήστε στην αριστερή πλευρά ενός πίνακα δύο διαστάσεων μια νέα στήλη. Ο πίνακας που προκύπτει έχει τα ίδια κατώτερα όρια με τον αρχικό πίνακα δύο διαστάσεων.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός. Εάν αυτός ο πίνακας έχει 1 διάσταση, θεωρείται ως η τελευταία στήλη του πίνακα 2 διαστάσεων που προκύπτει.

column (στήλη): Ένας μονοδιάστατος πίνακας με τόσα στοιχεία όσες σειρές υπάρχουν στον array_2d.

### Παράδειγμα:

        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

Προτάξτε μια νέα σειρά στην αρχή ενός δισδιάστατου πίνακα. Ο πίνακας που προκύπτει έχει τα ίδια κάτω όρια με τον αρχικό δισδιάστατο πίνακα.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο προϋπάρχων πίνακας μπορεί να είναι κενός. Εάν αυτός ο πίνακας έχει 1 διάσταση, θεωρείται ως η τελευταία σειρά του δισδιάστατου πίνακα που προκύπτει.

row (σειρά): Ένας μονοδιάστατος πίνακας που περιέχει τόσα στοιχεία όσες και στήλες στον array_2d.

### Παράδειγμα:

        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

Αρχικοποίηση ενός νέου πίνακα μηδενικής βάσης με αριθμητικές τιμές.

### Σύνταξη:

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

### Παράμετροι:

from (από): Τιμή του πρώτου στοιχείου.

upto (έως): Το τελευταίο στοιχείο δεν πρέπει να υπερβαίνει το UpTo.

bystep (με_βήμα): Η διαφορά μεταξύ δύο διαδοχικών στοιχείων (Προεπιλογή = 1).

### Παράδειγμα:

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

## Reverse

Επιστροφή του αντίστροφου πίνακα εισόδου μιας διάστασης.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για αντιστροφή.

### Παράδειγμα:

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

## Shuffle

Επιστρέφει μια τυχαία μετάθεση ενός μονοδιάστατου πίνακα.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για τυχαία σειρά.

### Παράδειγμα:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            Ο πίνακας "a" είναι τώρα σε τυχαία σειρά, f.i. (2, 3, 1, 4)

## Slice

Επιστρέφει ένα υποσύνολο ενός μονοδιάστατου πίνακα.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας προς κοπή.

from (από): Ο χαμηλότερος δείκτης στον array_1d του υποπίνακα προς εξαγωγή (συμπεριλαμβάνεται from)

upto (μέχρι): Ο ανώτερος δείκτης στο array_1d του υποπίνακα προς εξαγωγή (συμπεριλαμβάνεται upto). Η προεπιλεγμένη τιμή είναι το άνω όριο του array_1d. Εάν upto < from τότε ο πίνακας που επιστρέφεται είναι κενός.

### Παράδειγμα:

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

## Sort

Ταξινόμηση ενός πίνακα μιας διάστασης σε αύξουσα ή φθίνουσα σειρά. Οι συγκρίσεις κειμένων μπορεί να είναι με διάκριση πεζών-κεφαλαίων ή όχι.
Ο πίνακας πρέπει να γεμίσει ομοιογενώς, πράγμα που σημαίνει ότι τα στοιχεία πρέπει να είναι βαθμωτά του ίδιου τύπου. Επιτρέπονται τα στοιχεία
Empty και Null. Συμβατικά Empty < Null < οποιαδήποτε άλλη βαθμωτή τιμή.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για ταξινόμηση.

sortorder (ταξινομητής): Μπορεί να είναι είτε "ASC" (προεπιλογή) (αύξουσα) ή "DESC" (φθίνουσα).

casesensitive (διάκριση πεζών-κεφαλαίων): Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

### Παράδειγμα:

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

## SortColumns

Επιστροφή μιας μετάθεσης των στηλών ενός πίνακα δύο διαστάσεων, ταξινομημένων με βάση τις τιμές μιας δεδομένης σειράς.
Η σειρά πρέπει να γεμίσει ομοιογενώς, πράγμα που σημαίνει ότι όλα τα στοιχεία πρέπει να είναι βαθμωτά του ίδιου τύπου. Επιτρέπονται τα στοιχεία
Empty και Null. Συμβατικά Empty < Null < οποιαδήποτε άλλη βαθμωτή τιμή.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο δισδιάστατος πίνακας για ταξινόμηση.

rowindex (δείκτης σειράς): Το ευρετήριο της σειράς που θα χρησιμοποιηθεί ως αναφορά για την ταξινόμηση των στηλών.

sortorder (ταξινομητής): Μπορεί να είναι είτε "ASC" (προεπιλογή) (αύξουσα) ή "DESC" (φθίνουσα).

casesensitive (διάκριση πεζών-κεφαλαίων): Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

### Παράδειγμα:

        ' 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

Επιστροφή μιας μετάθεσης των γραμμών ενός πίνακα δύο διαστάσεων, ταξινομημένων με βάση τις τιμές μιας δεδομένης στήλης.
Η στήλη πρέπει να γεμίσει ομοιογενώς, επομένως όλα τα στοιχεία πρέπει να είναι βαθμίδες του ίδιου τύπου. Επιτρέπονται τα στοιχεία
Empty και Null. Συμβατικά Empty < Null < οποιαδήποτε άλλη βαθμωτή τιμή.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο πίνακας για ταξινόμηση.

columnindex (ευρετήριο_στήλης): Το ευρετήριο της στήλης που θα χρησιμοποιηθεί ως αναφορά για την ταξινόμηση των σειρών.

sortorder (ταξινομητής): Μπορεί να είναι είτε "ASC" (προεπιλογή) (αύξουσα) ή "DESC" (φθίνουσα).

casesensitive (διάκριση πεζών-κεφαλαίων): Μόνο για συγκρίσεις συμβολοσειρών (Προεπιλογή = False).

### Παράδειγμα:

        ' 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

Εναλλάσσει γραμμές και στήλες σε έναν δισδιάστατο πίνακα.

### Σύνταξη:

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

### Παράμετροι:

array_2d: Ο δισδιάστατος πίνακας προς αντιμετάθεση.

### Παράδειγμα:

        ' 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

Κατάργηση από έναν πίνακα μιας διάστασης όλων των καταχωρήσεων Null, Empty και μηδενικού μήκους.
Τα στοιχεία συμβολοσειράς περικόπτονται με τη συνάρτηση του LibreOffice Basic Trim().

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας για περικοπή.

### Παράδειγμα:

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

## Union

Δημιουργεί ένα σύνολο, ως πίνακα μηδενικής βάσης, εφαρμόζοντας τον τελεστή ένωσης στους δύο πίνακες εισόδου. Τα στοιχεία που προκύπτουν προέρχονται από οποιονδήποτε από τους δύο πίνακες.
Ο πίνακας που προκύπτει ταξινομείται με αύξουσα σειρά.
Και οι δύο πίνακες εισόδου πρέπει να συμπληρωθούν ομοιογενώς, τα στοιχεία τους πρέπει να είναι βαθμωτές του ίδιου τύπου. Τα στοιχεία Empty και Null απαγορεύονται.
Η σύγκριση κειμένου μπορεί να κάνει διάκριση πεζών-κεφαλαίων ή όχι.

### Σύνταξη:

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

### Παράμετροι:

array1_1d: Ο πρώτος πίνακας εισόδου.

array2_1d: Ο δεύτερος πίνακας εισόδου.

casesensitive (διάκριση πεζών-κεφαλαίων): Ισχύει μόνο εάν οι πίνακες είναι συμπληρωμένοι με συμβολοσειρές (Προεπιλογή = False).

### Παράδειγμα:

        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

Δημιουργία ενός συνόλου μοναδικών τιμών που προέρχονται από τον πίνακα εισόδου.
Ο πίνακας εισόδου πρέπει να συμπληρωθεί ομοιογενώς, τα στοιχεία του πρέπει να είναι βαθμωτές του ίδιου τύπου. Τα στοιχεία Empty και Null απαγορεύονται.
Η σύγκριση κειμένου μπορεί να κάνει διάκριση πεζών-κεφαλαίων ή όχι.

### Σύνταξη:

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

### Παράμετροι:

array_1d: Ο πίνακας εισόδου.

casesensitive (διάκριση πεζών-κεφαλαίων): Ισχύει μόνο εάν ο πίνακας είναι γεμάτος με συμβολοσειρές (Προεπιλογή = False).

### Παράδειγμα:

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

Όλες οι ρουτίνες ή αναγνωριστικά του ScriptForge στη Basic που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζονται να χρησιμοποιηθούν σε μακροεντολές Basic ή σενάρια Python.

Σχετικά θέματα

Συναρτήσεις πίνακα

Χρήση συναρτήσεων Calc σε μακροεντολές

Υπηρεσία ScriptForge.Dictionary