Contenuto
Indice 🔎︎

# Servizio ScriptForge.Array

Fornisce una raccolta di metodi per manipolare e trasformare matrici a una dimensione (vettori) e a due dimensioni (matrici). Questi comprendono: operazioni di inserimento, ordinamento, importazione da ed esportazione in file di testo.

Le matrici con più di due dimensioni non possono essere usate con i metodi di questo servizio, con l'unica eccezione del metodo CountDims che accetta matrici con qualsiasi numero di dimensioni.

Gli elementi delle matrici possono contenere qualsiasi tipo di valore, comprese matrici nidificate.

## Invocare il servizio

Prima di usare il servizio Array è necessario caricare le librerie ScriptForge usando:

          GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

Il caricamento della libreria creerà l'oggetto SF_Array che può essere usato per chiamare i metodi del servizio Array.

I seguenti frammenti di codice mostrano diversi modi per richiamare i metodi del servizio Array (il metodo Append è usato come esempio):

          SF_Array.Append(...)

          Dim arr    :    arr = SF_Array
          arr.Append(...)

          Dim arr    :    arr = CreateScriptService("Array")
          arr.Append(...)

Il metodo CreateScriptService è disponibile solo dopo che sono state caricate in memoria le librerie ScriptForge.

Metodi
Append AppendColumn AppendRow Contains ConvertToDictionary 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

Il primo argomento della maggior parte dei metodi è l'oggetto matrice da considerare. Viene passato sempre per riferimento e rimane inalterato. I metodi come Append, Prepend, ecc. dopo la loro esecuzione restituiscono una nuova matrice.

## Append

Aggiunge gli elementi elencati negli argomenti alla fine della matrice di partenza.

### Sintassi:

          SF_Array.Append(Array_1D As Variant, arg0 As Variant, [arg1 As Variant], ...) As Variant

### Parametri:

Array_1D: la matrice preesistente, che può essere vuota.

arg0, ... : un elenco di elementi da accodare alla matrice Array_1D.

### Esempio:

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

## AppendColumn

Aggiunge una nuova colonna alla destra di una matrice bidimensionale. La matrice che ne risulta ha gli stessi limiti inferiori della matrice bidimensionale iniziale.

### Sintassi:

          SF_Array.AppendColumn(Array_2D As Variant, New_Column As Variant) As Variant

### Parametri:

Array_2D: la matrice preesistente, che può essere vuota. Se la matrice ha una sola dimensione, viene considerata come prima colonna della matrice bidimensionale risultante.

New_Column: una matrice unidimensionale con tanti elementi quante sono le righe nella matrice Array_2D.

### Esempio:

          Sub Example_AppendColumn()
          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
          End Sub

## AppendRow

Aggiunge un nuova riga in fondo a una matrice bidimensionale. La matrice che ne risulta ha gli stessi limiti inferiori della matrice bidimensionale iniziale.

### Sintassi:

          SF_Array.AppendRow(Array_2D As Variant, Row As Variant) As Variant

### Parametri:

Array_2D: la matrice preesistente, che può essere vuota. Se la matrice è unidimensionale, viene considerata la prima riga della matrice bidimensionale risultante.

Row: una matrice unidimensionale con tanti elementi quante sono le colonne nella matrice Array_2D.

### Esempio:

          Sub Example_AppendRow()
          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
          End Sub

## Contains

Controlla se una matrice unidimensionale contiene un determinato numero, testo o data. La comparazione del testo può essere soggetta a distinzione tra maiuscole e minuscole oppure no.
Le matrici ordinate di partenza devono essere riempite in modo omogeneo, ciò significa che tutti gli elementi devono essere scalari dello stesso tipo (i valori Empty e Null sono vietati).
Il risultato del metodo non è prevedibile se una matrice viene passata come ordinata, ma in realtà non lo è.
Se la matrice è ordinata viene effettuata una ricerca di tipo binario, altrimenti viene semplicemente controllata da cima a fondo ed i valori Empty e Null vengono ignorati.

### Sintassi:

          SF_Array.Contains(Array_1D, ToFind As Variant, [CaseSensitive As Boolean], [SortOrder As String]) As Boolean

### Parametri:

Array_1D: la matrice da controllare.

ToFind: un numero, una data o una stringa da cercare.

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

SortOrder: "ASC", "DESC" o "" (= non ordinata, predefinito)

### Esempio:

          Sub Example_Contains()
          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
          End Sub

## ConvertToDictionary

Memorizza il contenuto di una matrice bidimensionale in un oggetto ScriptForge.Dictionary.
La chiave sarà estratta dalla prima colonna e l'elemento dalla seconda.

### Sintassi:

          SF_Array.ConvertToDictionary(Array_2D As Variant) As Variant

### Parametri:

Array_1D: la prima colonna deve contenere esclusivamente stringhe di lunghezza > 0, in qualsiasi ordine.

### Esempio:

          Sub Example_ConvertToDictionary()
          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
          End Sub

## CountDims

Conta il numero di dimensioni di una matrice. Il risultato può essere maggiore di due.
Se l'argomento non è una matrice restituisce -1
Se la matrice non è inizializzata, restituisce 0.

### Sintassi:

          SF_Array.CountDims(Array_ND As Variant) As Integer

### Parametri:

Array_ND: la matrice da esaminare.

### Esempio:

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

## Difference

Costruisce un insieme, in forma di matrice con indice iniziale zero, applicando l'operatore della differenza ai valori delle due matrici di partenza. Gli elementi risultanti derivano dalla prima matrice e non dalla seconda.
La matrice risultante è ordinata in modo crescente.
Entrambe le matrici di partenza devono essere riempite in modo omogeneo, i loro elementi devono essere scalari dello stesso tipo. Sono proibiti gli elementi Empty e Null.
Il confronto del testo può distinguere tra maiuscole e minuscole.

### Sintassi:

          SF_Array.Difference(Array1_1D As Variant, Array2_1D As Variant[, CaseSensitive As Boolean]) As Variant

### Parametri:

Array1_1D: una matrice unidimensionale di riferimento, i cui elementi sono esaminati per la rimozione.

Array2_1D: una matrice unidimensionale, i cui elementi vengono rimossi dalla matrice passata come primo argomento.

CaseSensitive: solo per le matrici popolate da stringhe, valore predefinito = False.

### Esempio:

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

## ExportToTextFile

Scrivete in sequenza tutti gli elementi della matrice in un file di testo. Se il file esiste già, viene sovrascritto senza alcun avvertimento.

### Sintassi:

          SF_Array.ExportToTextFile(Array_1D As Variant, FileName As String, [Encoding As String]) As Boolean

### Parametri:

Array_1D: la matrice da esportare. Deve contenere solamente stringhe.

FileName: il nome del file di testo che contiene i dati. Il nome è espresso come risulta dall'attuale proprietà FileNaming del servizio SF_FileSystem. Predefinito = any (sono ammessi sia il formato URL, sia il formato nativo del sistema operativo).

Encoding: il set di caratteri da usare. Usate uno dei nomi presente nell'elenco set di caratteri IANA. Fate attenzione che LibreOffice potrebbe non implementare tutti i set di caratteri esistenti. Il predefinito è "UTF-8".

### Esempio:

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

## ExtractColumn

Estrae una determinata colonna da una matrice bidimensionale memorizzandola in una nuova matrice.
I suoi limiti inferiore LBound e superiore UBound sono identici a quelli della prima dimensione della matrice di partenza.

### Sintassi:

          SF_Array.ExtractColumn(Array_2D As Variant, ColumnIndex As Long) As Variant

### Parametri:

Array_2D: la matrice da cui eseguire l'estrazione.

ColumnIndex: il numero della colonna da estrarre - dev'essere compreso nell'intervallo [LBound, UBound].

### Esempio:

          Sub Example_ExtractColumn
             'Crea una matrice 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))
             'Estrae la terza colonna: |3, 6, 9|
             col = SF_Array.ExtractColumn(mat, 2)
          End Sub

## ExtractRow

Estrae una determinata riga da una matrice bidimensionale memorizzandola in una nuova matrice.
I suoi limiti inferiore LBound e superiore UBound sono identici a quelli della seconda dimensione della matrice di partenza.

### Sintassi:

          SF_Array.ExtractRow(Array_2D As Variant, RowIndex As Long) As Variant

### Parametri:

Array_2D : La matrice dalla quale effettuare l'estrazione.

RowIndex: il numero della riga da estrarre - deve essere compreso nell'intervallo [LBound, UBound].

### Esempio:

          Sub Example_ExtractRow
             'Crea una matrice 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))
             'Estrae la prima riga: |1, 2, 3|
             row = SF_Array.ExtractRow(mat, 0)
          End Sub

## Flatten

Accoda tutti i singoli elementi di una matrice e tutti gli elementi delle matrici nidificate in un'unica nuova matrice priva di matrici nidificate. Le matrici nidificate vuote vengono ignorate, mentre quelle che hanno un numero di dimensioni maggiore di uno non vengono appiattite.

### Sintassi:

          SF_Array.Flatten(Array_1D As Variant) As Variant

### Parametri:

Array_1D: la matrice preesistente, che può essere vuota.

### Esempio:

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

Potete usare il metodo Flatten assieme ad altri metodi come Append o Prepend in modo da concatenare un insieme di matrici 1D in una singola matrice 1D.

### Esempio:

Quello che segue è un esempio di come i due metodi Flatten e Append possono essere combinati per concatenare tre matrici.

          Sub Concatenate_Example
             'Crea le tre matrici usate in questo esempio
             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)
             'Concatena le tre matrici in una singola matrice 1D
             Dim arr as Variant
             arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
             '(1, 2, 3, 4, 5, 6, 7, 8, 9)
          End Sub

## ImportFromCSVFile

Importa i dati contenuti in un file CSV (valori separati da virgole). La virgola può essere sostituita con qualsiasi altro carattere.

Il formato CSV utilizzabile è descritto in Formati comuni IETF e tipi MIME per i file CSV (in inglese).

Ciascuna riga del file contiene un record intero (non è ammessa l'interruzione delle righe).
In ogni caso sequenze come \n, \t, ... non vengono modificate. Per gestirle usate il metodo SF_String.Unescape().

Il metodo restituisce una matrice bidimensionale le cui righe corrispondono a un singolo record letto dal file e le cui colonne corrispondono a un campo del record. Non effettua controlli in merito alla coerenza dei tipi di campo nelle colonne. Una presunzione migliore verrà fatta nell'identificazione dei tipi numerici e delle date.

Se una riga contiene un numero minore o maggiore di campi rispetto alla prima riga del file, verrà sollevata un'eccezione. In ogni caso le righe vuote saranno semplicemente ignorate. Se la dimensione del file eccede il numero limite di elementi (vedete all'interno del codice), viene sollevata un'eccezione e la matrice viene troncata.

### Sintassi:

          SF_Array.ImportFromCSVFile(FileName As String, [Delimiter As String], [DateFormat As String]) As Variant

### Parametri:

FileName: il nome del file di testo che contiene i dati. Il nome è espresso come risulta dall'attuale proprietà FileNaming del servizio SF_FileSystem. Predefinito = any (sono ammessi sia il formato URL, sia il formato nativo del sistema operativo).

Delimiter: un singolo carattere, di solito una virgola, un punto e virgola o un carattere di tabulazione. Predefinito = ",".

DateFormat: un meccanismo speciale gestisce le date quando DateFormat è in uno dei formati "AAAA-MM-GG", "GG-MM-AAAA" o "MM-GG-AAAA". Il trattino (-) può essere sostituito con un punto (.), una barra (/) o uno spazio. Gli altri formati di data saranno ignorati. Le date che per impostazione predefinita sono "" vengono considerate come del normale testo.

### Esempio:

Dato questo file CSV:

          Name,DateOfBirth,Address,City
          Anna,2002/03/31,"Rue de l'église, 21",Toulouse
          Fred,1998/05/04,"Rue Albert Einstein, 113A",Carcassonne

          Sub Example_ImportFromCSVFile()
          Dim a As Variant
              a = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "YYYY/MM/DD")
              MsgBox a(0, 3)    ' City
              MsgBox TypeName(a(1, 2))    ' Date
              MsgBox a(2, 2)    ' Rue Albert Einstein, 113A
          End Sub

## IndexOf

Cerca un numero, una stringa o una data all'interno di una matrice unidimensionale. Il confronto del testo può distinguere tra maiuscole e minuscole.
Se la matrice è ordinata deve essere riempita in modo omogeneo, ciò significa che tutti gli elementi devono essere scalari dello stesso tipo (i valori Empty e Null non sono ammessi).
Il risultato del metodo non è prevedibile se una matrice viene passata come ordinata, ma in realtà non lo è.
Se la matrice è ordinata viene eseguita una ricerca di tipo binario, altrimenti viene semplicemente controllata da cima a fondo e i valori Empty e Null vengono ignorati.
Se la ricerca è stata infruttuosa, il metodo restituisce LBound(matrice di partenza) - 1.

### Sintassi:

          SF_Array.IndexOf(Array_1D, ToFind As Variant, [CaseSensitive As Boolean], [SortOrder As String]) As Long

### Parametri:

Array_1D: la matrice da controllare.

ToFind : un numero, una data o una stringa da cercare.

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

SortOrder: "ASC", "DESC" o "" (= non ordinata, predefinito)

### Esempio:

          Sub Example_IndexOf()
              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
          End Sub

## Insert

Inserisce, prima di un determinato indice della matrice di partenza, tutti gli elementi elencati negli argomenti.
Gli argomenti vengono inseriti alla cieca. Ciascuno di essi dev'essere uno scalare di qualsiasi tipo o una matrice da nidificare.

### Sintassi:

          SF_Array.Insert(Array_1D As Variant, Before As Long, arg0 As Variant, [arg1 As Variant], ...) As Variant

### Parametri:

Array_1D : la matrice preesistente, che può essere vuota.

Before: l'indice prima del quale deve avvenire l'inserimento; dev'essere compreso nell'intervallo [LBound, UBound + 1].

arg0, ...: l'elenco di elementi da inserire all'interno di Array_1D.

### Esempio:

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

## InsertSorted

Inserisce un nuovo elemento nel posto corretto di una matrice ordinata.
La matrice deve essere riempita in modo omogeneo, ciò significa che tutti gli elementi devono essere scalari dello stesso tipo.
Gli elementi Empty e Null non sono ammessi.

### Sintassi:

          SF_Array.InsertSorted(Array_1D As Variant, Item As Variant, SortOrder As String, CaseSensitive As Boolean) As Variant

### Parametri:

Array_1D: la matrice da ordinare.

Item: il valore scalare da inserire, dello stesso tipo degli elementi già presenti nella matrice.

SortOrder: "ASC" (predefinito) o "DESC".

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

### Esempio:

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

## Intersection

Costruisce un insieme, in forma di matrice con indice iniziale zero, applicando alle due matrici l'operatore di intersezione degli insiemi. Gli elementi risultanti sono quelli presenti in entrambe le matrici.
La matrice risultante è ordinata in modo crescente.
Entrambe le matrici di partenza devono essere riempite in modo omogeneo, in altre parole, tutti i loro elementi devono essere scalari dello stesso tipo. Sono proibiti gli elementi Empty e Null.
Il confronto del testo può distinguere tra maiuscole e minuscole.

### Sintassi:

          SF_Array.Intersection(Array1_1D As Variant, Array2_1D As Variant[, CaseSensitive As Boolean]) As Variant

### Parametri:

Array1_1D: la prima matrice di partenza.

Array2_1D: la seconda matrice di partenza.

CaseSensitive: si applica alle matrici popolate con elementi di testo, valore predefinito = False.

### Esempio:

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

## Join2D

Unisce una matrice bidimensionale con due delimitatori, uno per le colonne e uno per le righe.

### Sintassi:

          SF_Array.Join2D(Array_2D As Variant, ColumnDelimiter As String, RowDelimiter As String, Quote As Boolean) As String

### Parametri:

Array_2D: ogni elemento deve essere un testo, un numero, una data o un valore logico (booleano).
Le date sono convertite nel formato AAAA-MM-GG hh:mm:ss.
Gli elementi non validi sono sostituiti da stringhe vuote di lunghezza zero.

ColumnDelimiter: delimita ciascuna colonna (predefinito = Tab/Chr(9)).

RowDelimiter: delimita ciascuna riga (predefinito = LineFeed/Chr(10))

Quote: se True, protegge le stringhe racchiuse tra virgolette. Il valore predefinito è False.

### Esempio:

          Sub Example_Join2D()
          -                     | 1, 2, "A", [2020-02-29], 5      |
          -    SF_Array.Join_2D(| 6, 7, "this is a string", 9, 10 |, ",", "/")
          -            ' "1,2,A,2020-02-29 00:00:00,5/6,7,this is a string,9,10"
          End Sub

## Prepend

Aggiunge, all'inizio della matrice di partenza, gli elementi elencati negli argomenti.

### Sintassi:

          SF_Array.Prepend(Array_1D As Variant, arg0 As Variant, [arg1 As Variant], ...) As Variant

### Parametri:

Array_1D : la matrice preesistente, che può essere vuota.

arg0, ...: l'elenco degli elementi da aggiungere all'inizio di Array_1D.

### Esempio:

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

## PrependColumn

Inserisce una nuova colonna alla sinistra di una matrice bidimensionale. La matrice risultante ha gli stessi limiti inferiori della matrice bidimensionale di partenza.

### Sintassi:

          SF_Array.PrependColumn(Array_2D As Variant, Column As Variant) As Variant

### Parametri:

Array_2D: la matrice preesistente, che può essere vuota. Se la matrice ha una dimensione viene considerata come ultima colonna della risultante matrice bidimensionale.

Column: una matrice unidimensionale con tanti elementi quante sono le righe in Array_2D.

### Esempio:

          Sub Example_PrependColumn()
          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
          End Sub

## PrependRow

Inserisce una nuova riga all'inizio di una matrice bidimensionale. La matrice risultante ha gli stessi limiti inferiori della matrice bidimensionale di partenza.

### Sintassi:

          SF_Array.PrependRow(Array_2D As Variant, Row As Variant) As Variant

### Parametri:

Array_2D: la matrice preesistente, che può essere vuota. Se la matrice ha una dimensione viene considerata come ultima riga della risultante matrice bidimensionale.

Row: una matrice unidimensionale contenente tanti elementi quante sono le colonne in Array_2D.

### Esempio:

          Sub Example_PrependRow()
          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
          End Sub

## RangeInit

Inizializza con valori numerici una nuova matrice avente base zero.

### Sintassi:

          SF_Array.RangeInit(From As [number], UpTo As [number] [, ByStep As [number]]) As Variant

### Parametri:

From: valore del primo elemento.

UpTo: l'ultimo elemento non può eccedere UpTo.

ByStep: la differenza tra due elementi successivi (predefinito = 1).

### Esempio:

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

## Reverse

Restituisce la matrice unidimensionale invertita di quella iniziale.

### Sintassi:

          SF_Array.Reverse(Array_1D As Variant) As Variant

### Parametri:

Array_1D: la matrice da invertire.

### Esempio:

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

## Shuffle

Restituisce una permutazione casuale di una matrice unidimensionale.

### Sintassi:

          SF_Array.Shuffle(Array_1D As Variant) As Variant

### Parametri:

Array_1D: la matrice da mescolare.

### Esempio:

          Sub Example_Shuffle()
          Dim a As Variant
              a = SF_Array.Shuffle(Array(1, 2, 3, 4))
                  ' Non prevedibile
          End Sub

## Slice

Restituisce un sottoinsieme di una matrice unidimensionale.

### Sintassi:

          SF_Array.Slice(Array_1D As Variant, From As Long, [UpTo As Long]) As Variant

### Parametri:

Array_1D: la matrice da cui estrarre una parte.

From: l'indice più basso di Array_1D da cui inizia la sottomatrice da estrarre (From compreso)

UpTo: l'indice più alto di Array_1D in cui finisce la sottomatrice da estrarre (UpTo compreso). Predefinito = limite superiore di Array_1D. Se UpTo < From allora la matrice restituita è vuota.

### Esempio:

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

## Sort

Ordina una matrice unidimensionale in modo ascendente o discendente. Il confronto di testi può distinguere tra maiuscole e minuscole.
La matrice deve essere riempita in modo omogeneo, ciò significa che gli elementi devono essere scalari dello stesso tipo.
Gli elementi Empty e Null sono ammessi. Convenzionalmente Empty < Null < qualunque altro valore scalare.

### Sintassi:

          SF_Array.Sort(Array_1D As Variant, SortOrder As String, CaseSensitive As Boolean) As Variant

### Parametri:

Array_1D: la matrice da ordinare.

SortOrder: "ASC" (predefinito) o "DESC".

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

### Esempio:

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

## SortColumns

Restituisce la permutazione delle colonne di una matrice bidimensionale, ordinata in base ai valori di una determinata riga.
La riga dev'essere riempita in modo omogeneo, il che significa che tutti gli elementi devono essere scalari dello stesso tipo. Gli
Elementi Empty e Null sono ammessi. Convenzionalmente Empty < Null < qualunque altro valore scalare.

### Sintassi:

          SF_Array.SortColumns(Array_1D As Variant, RowIndex As Long, SortOrder As String, CaseSensitive As Boolean) As Variant

### Parametri:

Array_1D : La matrice da ordinare.

RowIndex: l'indice della riga in base alla quale riordinare le colonne.

SortOrder: "ASC" (predefinito) o "DESC".

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

### Esempio:

          Sub Example_SortColumns()
          -                         | 5, 7, 3 |            ' | 7, 5, 3 |
          -    SF_Array.SortColumns(| 1, 9, 5 |, 2, "ASC") ' | 9, 1, 5 |
          -                         | 6, 1, 8 |            ' | 1, 6, 8 |
          End Sub

## SortRows

Restituisce una permutazione delle righe di una matrice bidimensionale, ordinata in base ai valori di una determinata colonna.
La colonna deve essere riempita in modo omogeneo, perciò tutti gli elementi devono essere scalari dello stesso tipo. Gli
Elementi Empty e Null sono ammessi. Convenzionalmente Empty < Null < qualunque altro valore scalare.

### Sintassi:

          SF_Array.SortRows(Array_1D As Variant, ColumnIndex As Long, SortOrder As String, CaseSensitive As Boolean) As Variant

### Parametri:

Array_1D: la matrice da ordinare.

RowIndex: l'indice della colonna in base alla quale riordinare le righe.

SortOrder: "ASC" (predefinito) o "DESC".

CaseSensitive : Solo per il confronto di stringhe, valore predefinito = False.

### Esempio:

          Sub Example_SortRows()
          -                      | 5, 7, 3 |            ' | 1, 9, 5 |
          -    SF_Array.SortRows(| 1, 9, 5 |, 2, "ASC") ' | 5, 7, 3 |
          -                      | 6, 1, 8 |            ' | 6, 1, 8 |
          End Sub

## Transpose

Inverte righe e colonne di una matrice bidimensionale.

### Sintassi:

          SF_Array.Transpose(Array_2D As Variant) As Variant

### Parametri:

Array_2D: la matrice da trasporre.

### Esempio:

          Sub Example_Transpose()
          -                       | 1, 2 |  ' | 1, 3, 5 |
          -    SF_Array.Transpose(| 3, 4 |) ' | 2, 4, 6 |
          -                       | 5, 6 |
          End Sub

## TrimArray

Rimuove da una matrice unidimensionale tutti gli elementi Null, Empty e di lunghezza zero.
Agli elementi di tipo stringa vengono rimossi gli spazi con la funzione Trim() di LibreOffice Basic.

### Sintassi:

          SF_Array.TrimArray(Array_1D As Variant) As Variant

### Parametri:

Array_1D: la matrice da controllare.

### Esempio:

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

## Union

Costruisce un insieme, in forma di matrice con indice iniziale zero, applicando alle due matrici iniziali l'operatore di unione degli insiemi. Gli elementi risultanti provengono da entrambe le matrici.
La matrice risultante è ordinata in modo crescente.
Entrambe le matrici di partenza devono essere riempite in modo omogeneo, i loro elementi devono essere scalari dello stesso tipo. Gli elementi Empty e Null non sono ammessi.
Il confronto del testo può distinguere tra maiuscole e minuscole.

### Sintassi:

          SF_Array.Union(Array1_1D As Variant, Array2_1D As Variant[, CaseSensitive As Boolean]) As Variant

### Parametri:

Array1_1D: La prima matrice di partenza.

Array2_1D: La seconda matrice di partenza.

CaseSensitive : Solo per le matrici popolate da stringhe, valore predefinito = False.

### Esempio:

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

## Unique

Costruisce un insieme di valori univoci derivati dalla matrice di partenza.
La matrice iniziale deve essere riempita in modo omogeneo, i suoi elementi devono essere scalari dello stesso tipo. Gli elementi Empty e Null non sono ammessi.
Il confronto del testo può distinguere tra maiuscole e minuscole.

### Sintassi:

          SF_Array.Unique(Array_1D As Variant, CaseSensitive As Boolean]) As Variant

### Parametri:

Array_1D: la matrice di partenza.

CaseSensitive: solo se la matrice è popolata con testo, predefinito = False.

### Esempio:

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

Tutte le routine e gli identificatori Basic di ScriptForge che iniziano con un carattere di sottolineatura "_" sono riservati per uso interno. Non è previsto il loro utilizzo nelle macro in Basic.

Argomenti correlati

Funzioni Matrice

Richiamare funzioni Calc

Servizio ScriptForge.Dictionary