AutoIt/Tablice - funkcje obsługi

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Wyświetlanie zawartości tablicy[edytuj]

_ArrayDisplay[edytuj]

#include <Array.au3>
_ArrayDisplay ( Const ByRef $avArray [, $sTitle = "ArrayDisplay" [, $sArrayRange = "" 
               [, $iFlags = 0 [, $vUser_Separator = Default [, $sHeader = Default 
               [, $iMax_ColWidth = Default [, $iAlt_Color = Default [, $hUser_Function = ""]]]]]]]] )

Funkcja wyświetla zawartość 1 lub 2-wymiarowej tablicę w kontrolce ListView. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - wymiar tablicy jest większy niż 2.

$avArray - nazwa tablicy

$sTitle - tytuł kontrolki

$sArrayRange - maksymalna ilość wierszy / kolumn (domyślnie cała tablica), przykładowa składnia tego parametru:

"7"           - pokaż wiersze 0-7 z wszystkich kolumn
"7:"          - pokaż ostatnie wiersze od 7 do końca z wszystkich kolumn
"|7"          - pokaż wszystkie wiersze z kolumnami 0-7
"|7:"         - pokaż wszystkie wiersze z kolumnami od 7 do końca
"7|7"         - pokaż wiersze 0-7 z kolumnami 0-7
"05:07"       - pokaż wiersze 5-7 z wszystkich kolumn
"|05:07"      - pokaż wszystkie wiersze z kolumnami 5-7
"7|05:07"     - pokaż wiersze 0-7 z kolumn 5-7
"5:07|7"      - pokaż wiersze 5-7 z kolumn 0-7
"05:07|05:07" - pokaż wiersze 5-7 z kolumn 5-7

$iFlags - opcje wyświetlania (suma następujących wartości), 0 - domyślne, 1 - przetworzenie tablicy (zamiana wierszy na kolumny i kolumn na wiersze), 2 - wyrównanie do prawej, 4 - środkowanie, 8 - wyświetlania MsgBox na ekranach powitalnych i błędów podczas przetwarzania dużych tablic

$vUser_Separator - ustawia opcję wyświetlania kolumny podczas kopiowania danych do schowka. "znak" - znak separatora między kolumnami, liczba - stała szerokość kolumny (szersze zostaną przycięte do tej wartości), Default - domyślny znak separatora (najczęściej pionowa kreska |)

$sHeader - nazwy kolumn w nagłówku (ciąg nazw oddzielonych bieżącym separator - zwykle "|")

$iMax_ColWidth - szerokość maksymalna kolumn w kontrolce, Default = 350 pikseli

$iAlt_Color - alternatywny kolor co drugiego wiersza, Default - wszystkie wiersze w kolorze tła

$hUser_Function - zmienna przypisana do funkcji zdefiniowanych przez użytkownika, Defaulte = None


Znaczenie 4 przycisków w dolnej części okna:

Copy Data & Hdr/Row - skopiować tablicę lub wybrany wiersz (wiersze) do schowka, dodając pełny nagłówek i identyfikator wiersza

Copy Data Only - skopiować tablicę lub wybrany wiersz (wiersze) do schowka bez nagłówka i identyfikatorów wiersza

Run User Func - uruchomić funkcję zdefiniowaną przez użytkownika przekazaną w $sUser_Function. Funkcja ta jest całkowicie odrębny od UDF i jest tworzona przez użytkownika. Musi posiadać dwa parametry: 1 - pełna tablica, 2 - 1-wymiarowa tablica pomocnicza, która w indeksie [0] przekazuje ilość wybranych wierszy. Przycisk jest nieaktywny, jeżeli funkcja nie została zdefiniowana.

Skrypt Exit - natychmiast zakończyć skrypt

Przykład pokazujący całą gamę możliwości funkcji:

#include <Array.au3>

; tworzenie tablicy 1D
Local $aArray_1D[5] = ["Wartość 0", "Wartość 1", "Bardzo długa Wartość 3", "Wartość 3", "Wartość 4"]

_ArrayDisplay($aArray_1D, "Tablica 1D")
_ArrayDisplay($aArray_1D, "Tablica przetworzona na 2D", Default, 1)

; tworzenie tablicy 2D
Local $aArray_2D[75][255]
For $i = 0 To UBound($aArray_2D) - 1
   For $j = 0 To UBound($aArray_2D, 2) - 1
      $aArray_2D[$i][$j] = "Wartość " & StringFormat("%02i", $i) & StringFormat("%02i", $j)
   Next
Next

_ArrayDisplay($aArray_2D, "Tablica 2D")
_ArrayDisplay($aArray_2D, "Tablica 2D zamienione wiersze z kolumnami", Default, 1)

ReDim $aArray_2D[20][10]
$aArray_2D[5][5] = "Bardzo długa wartość"
_ArrayDisplay($aArray_2D, "Tablica z alternatywnymi kolorami wierszy i zmienionymi nazwami kolumn", _
			  Default, Default, Default, "AA|BB|CC|DD|EE|FF|GG|HH|II|JJ", Default, 0xDDFFDD)

; przypisanie nazwy funkcji użytkownika do zmiennej
Local $hUserFunction = _UserFunc

$aArray_2D[5][5] = "Wyrównanie do prawej"
Local $aSelected[] = [2]


_ArrayDisplay($aArray_2D, "Zakres danych - wyrównanie do prawej - szerokość kolumny - funkcja użytkownika", _
              "3:7|4:9", 2, 15, "AA|BB|CC|DD|EE|FF", Default, Default, $hUserFunction)

_ArrayDisplay($aArray_2D, "Zakres danych - środkowanie - szerokość kolumny - zamiana kolumn z wierszami", _
              "3:7|4:9", 5, 15, "AA|BB|CC|DD|EE|FF")

; wygenerowanie błędu, zmienna nie jest tablicą
Local $vVar = 0
_ArrayDisplay($vVar, "Bardzo poważny błąd!", Default, 8)

; definicja funkcji użytkownika
Func _UserFunc($aArray_2D, $aSelected)
	MsgBox (0,"Funkcja użytkownika", "Ilość wybranych wierszy: " & $aSelected[0])
EndFunc


Dodawanie i usuwanie komórek[edytuj]

_ArrayAdd[edytuj]

#include <Array.au3>
_ArrayAdd ( ByRef $avArray, $vValue )

Funkcja dodaje komórkę na koniec istniejącej 1-wymiarowej tablicy i nadaje jej określoną wartość (przez referencję). Zwraca indeks dodanej komórki, lub -1 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - zmienna nie jest tablicą, 2 - tablica nie jest 1-wymiarowa.

$avArray - nazwa tablicy

$vValue - wartość w dodawanej komórce

Przykład:

 
#include <Array.au3>

Local $avArray[0] ;deklarowanie pustej tablicy

_ArrayDisplay($avArray, "_ArrayAdd()")
_ArrayAdd($avArray, "Wasta")
_ArrayDisplay($avArray, "_ArrayAdd()")
_ArrayAdd($avArray, "AutoIt")
_ArrayDisplay($avArray, "_ArrayAdd()")


_ArrayColDelete[edytuj]

#include <Array.au3>
_ArrayColDelete ( ByRef $aArray, $iColumn [, $bConvert = False] )

Funkcja usuwa wybraną kolumnę z 2-wymiarowej tablicy. Wynik zapisuje w tablicy przez referencję. Zwraca pozostałą ilość kolumn, lub -1 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje jedną z wartości: 1 - zmienna nie jest tablicą, 2 - tablica nie jest 2-wymiarowa, 3 - nr kolumny jest po za zakresem.

$aArray - 2-wymiarowa tablica, wynik działania funkcji będzie przez referencję w niej zapisany

$iColumn - nr kolumny do usunięcia

$bConvert - dla True jeżeli w tablice pozostanie tylko jedna kolumna, to będzie ona zmieniona w tablicę 1-wymarową

Przykład:

 
#include <Array.au3>

Local $aArray[4][3]
For $i = 0 To 3
   For $j = 0 To 2
      $aArray[$i][$j] = $i & $j
   Next
Next
_ArrayDisplay($aArray, "Oryginalna tablica")

_ArrayColDelete($aArray, 2)
_ArrayDisplay($aArray, "Kolumna nr 2 usunięta")

;kopiowanie 2-kolumnowej tablicy
Local $aArray_2Col = $aArray

;2-wymiarowa 1-kolumnowa tablica
_ArrayColDelete($aArray, 0)
_ArrayDisplay($aArray, "1-kolumnowa tablica 2D")

;konwersja 2-wymiarowej 1-kolumnowej tablicy do tablicy 1-wymiarowej
_ArrayColDelete($aArray_2Col, 0, True)
_ArrayDisplay($aArray_2Col, "Tablica 1D")


_ArrayColInsert[edytuj]

#include <Array.au3>
_ArrayColInsert ( ByRef $aArray, $iColumn )

Funkcja dodaje kolumnę do jedno lub 2-wymiarowej tablicy. Wynik zapisuje w tablicy przez referencję. Zwraca nową ilość kolumn, lub -1 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje jedną z wartości: 1 - zmienna nie jest tablicą, 2 - tablica nie jest 1 lub 2-wymiarowa, 3 - nr kolumny jest mniejszy niż 0 lub większa od ilości kolumn + 1.

$aArray - 1 lub 2-wymiarowa tablica, wynik działania funkcji będzie przez referencję w niej zapisany

$iColumn - nr kolumny do dodania, komórki tej kolumny będą zawierały posty string ""

Przykład:

 
#include <Array.au3>

Local $aArray[4][3]
For $i = 0 To 3
   For $j = 0 To 2
      $aArray[$i][$j] = $i & $j
   Next
Next
_ArrayDisplay($aArray, "Oryginalna tablica")

;Dodanie kolumny na poz.1"
_ArrayColInsert($aArray, 1)
_ArrayDisplay($aArray, "Dodana kolumna nr1")


_ArrayInsert[edytuj]

#include <Array.au3>
_ArrayInsert ( ByRef $avArray, $iElement [, $vValue = ""] )

Funkcja dodaje komórkę w określonym miejscu istniejącej 1-wymiarowej tablicy i nadaje jej wartość (przez referencję). Zwraca nowy rozmiar tablicy, lub 0 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - zmienna nie jest tablicą, 2 - tablica nie jest 1-wymiarowa.

$avArray - nazwa tablicy

$iElement - indeks komórki, w miejscu której będzie wstawiona nowa komórka, poczynając od tego miejsca pozostałe komórki będą przesunięte (ich indeks zwiększy się o 1)

$vValue - wartość w dodawanej komórce, domyślnie pusty string

Przykład:

 
#include <Array.au3>

Local $avArray[] = ["Ala", "kota", "i", "Asa"]

_ArrayDisplay($avArray, "_ArrayInsert()")
_ArrayInsert($avArray, 1, "ma")
_ArrayDisplay($avArray, "_ArrayInsert()")


_ArrayPush[edytuj]

#Include <Array.au3>
_ArrayPush (ByRef $avArray, $vValue [, $iDirection = 0])

Funkcja dodaje nowy element do 1-wymiarowej tablicy, bez zwiększania jej rozmiaru. Wstawia nowy element (elementy) na koniec, usuwając element (elementy) na początku tablicy lub na odwrót. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - tablica $vValue jest większa od $avArray, 3 - tablica nie jest 1-wymiarowa.

$avArray - nazwa przetwarzanej tablicy

$vValue - wartość w dodawanej komórce, może być 1-wymiarową tablicą

$iDirection - określa gdzie mają być wstawiane nowe komórki, 0 - na końcu (wartość domyślna, 1 - na początku

Przykład:

#include <Array.au3>

Local $avArray[] = ["ma", "Asa", "i kota"]

_ArrayDisplay($avArray, "_ArrayPush()")
_ArrayPush($avArray, "Ala", 1)
_ArrayDisplay($avArray, "_ArrayPush()")


_ArrayDelete[edytuj]

#include <Array.au3>
_ArrayDelete(ByRef $avArray, $iElement)

Funkcja usuwa komórkę (komórki) z tablicy. Zwraca nowy rozmiar tablicy, lub 0 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 3 - wymiar tablicy jest większy niż 2.

$avArray - nazwa przetwarzanej tablicy

$iElement - indeks usuwanego elementu

UWAGA: Funkcja działa na tablicach 1D i 2D. Dla tablic 1-wymiarowych usuwana jest komórka o podanym indeksie, dla tablic 2-wymiarowych usuwany jest cały wiersz.

Przykład dla tablicy 1D:

#include <Array.au3>

Local $avArray[] = ["Ala", "ma", "nie ma", "Asa"]

_ArrayDisplay($avArray, "_ArrayDelete()")
_ArrayDelete($avArray, 2)
_ArrayDisplay($avArray, "_ArrayDelete()")

Przykład dla tablicy 2D:

#include <Array.au3>

Local $avArray[][] = [["Ala", "ma", "Asa"],["Ala", "ma", "kota"],["Ola", "ma", "kota"]]

_ArrayDisplay($avArray, "_ArrayDelete()")
_ArrayDelete($avArray, 1)
_ArrayDisplay($avArray, "_ArrayDelete()")


_ArrayPop[edytuj]

 #include <Array.au3>
_ArrayPop ( ByRef $avArray )

Funkcja zwraca ostatni element 1-wymiarowej tablicy, a następnie usuwa go. Jeżeli wystąpił błąd ustawiane jest makro @error: 1 - $avArray nie jest tablicą, 2 - tablica nie jest 1-wymiarowa, 3 - tablica jest pusta.

$avArray - nazwa przetwarzanej tablicy

Przykład:

#include <Array.au3>

Local $avArray[] = ["Ala", "ma", "psa", "Asa"]

_ArrayDisplay($avArray, "_ArrayPop()")
Do
   $val = _ArrayPop($avArray)
   If @error Then
      MsgBox(0, "_ArrayPop()", "Tablica jest pusta!")
      Exit
   EndIf
   MsgBox(0, "_ArrayPop()", "Zwracana wartość: " & $val)
   _ArrayDisplay($avArray, "_ArrayPop()")
Until 0


Przetwarzanie tablic[edytuj]

_ArrayCombinations[edytuj]

#include <Array.au3>
_ArrayCombinations ( $avArray, $iSet [, $sDelim = ""] )

Funkcja zwraca tablicę z wszystkimi kombinacjami elementów danej 1-wymiarowej tablicy, lub -1 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - tablica nie jest 1-wymiarowa.

Komórka zwracanej tablicy o indeksie [0] zawiera ilość kombinacji, pozostałe kolejne kombinacje.

$avArray - nazwa przetwarzanej tablicy

$iSet - ilość elementów kombinacji

$sDelim - znak separatora pomiędzy elementami kombinacji, domyślnie brak separatora

Przykład:

#include <Array.au3>

Local $aArray[5] = [1, 2, 3, 4, 5]

For $i = 1 To UBound($aArray)
   Local $aArrayCombo = _ArrayCombinations($aArray, $i, ",")
   _ArrayDisplay($aArrayCombo, "Kombinacje " & $i & " elementowe")
Next


_ArrayConcatenate[edytuj]

#include <Array.au3>
_ArrayConcatenate ( ByRef $avArrayTarget, $avArraySource [, $iStart = 0] )

Funkcja łączy dwie 1-wymiarowe tablice. Zwraca nowy wymiar tablicy, lub -1 gdy wystąpił błąd. W tym przypadku ustawiane jest makro @error: 1 - $avArrayTarget nie jest tablicą, 2 - $avArraySource nie jest tablicą, 3 - $avArrayTarget nie jest tablicą 1-wymiarową, 4 - $avArraySource nie jest tablicą 1-wymiarową, 5 - obie tablice nie są 1-wymiarowe.

$avArrayTarget - tablica, do której będzie dołączana druga tablica

$avArraySource - dołączana tablica

$iStart - indeks komórki w tablicy $avArraySource, od którego komórki tej tablicy będą dołączana na końcu tablicy $avArrayTarget

Przykład:

#include <Array.au3>

Local $avArrayTarget[] = [1, 2, 3, 4, 5]
Local $avArraySource[] = ["A", "B", "C", "D"]

_ArrayDisplay($avArrayTarget, "Tablica wyjściowa")
$dim = _ArrayConcatenate($avArrayTarget, $avArraySource, 1)
_ArrayDisplay($avArrayTarget, "Tablica wynikowa")
MsgBox(0, "_ArrayConcatenate()", "Nowy wymiar tablicy: " & $dim)


_ArrayExtract[edytuj]

#include <Array.au3>
_ArrayExtract ( $aArray [, $iStart_Row = 0 [, $iEnd_Row = 0 [, $iStart_Col = 0 [, $iEnd_Col = 0]]]] )

Funkcja wycina z tablicy 1 lub 2-wymiarowej obszar ograniczony wierszami i kolumnami o podanych numerach. Zwraca utworzony w ten sposób fragment wyjściowej tablicy, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmie wartość: 1 - $aArray nie jest tablicą, 2 - $aArray ma więcej wymiarów niż 2, 3 - $iStart_Row lub $iEnd_Row po za zakresem, 4 - $iStart_Row większe od $iEnd_Row, 5 - $iStart_Col lub $iEnd_Col po za zakresem, 6 - $iStart_Col większe od $iEnd_Col.

$aArray - przetwarzana tablica 1 lub 2-wymiarowa

$iStart_Row - nr początkowego wiersza

$iEnd_Row - nr końcowego wiersza

$iStart_Col - nr początkowej kolumny (tylko dla tablic 2D)

$iEnd_Col - nr końcowej kolumny (tylko dla tablic 2D)

Przykład:

#include <Array.au3>

Dim $aArray[4][4]
For $i = 0 To 3
   For $j = 0 To 3
      $aArray[$i][$j] = $i & $j
   Next
Next
_ArrayDisplay($aArray, "Oryginalna")
$aExtract = _ArrayExtract($aArray, 1, 2, 2, 3)
_ArrayDisplay($aExtract, "Wiersze 1-2, kol. 2-3")


_ArrayPermute[edytuj]

#include <Array.au3>
_ArrayPermute ( $avArray [, $sDelim = ""] )

Funkcja zwraca tablicę z wszystkimi permutacjami elementów danej 1-wymiarowej tablicy, lub -1 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - tablica nie jest 1-wymiarowa.

Komórka zwracanej tablicy o indeksie [0] zawiera ilość permutacji, pozostałe kolejne permutacje.

$avArray - nazwa przetwarzanej tablicy

$sDelim - znak separatora pomiędzy elementami kombinacji, domyślnie brak separatora

Przykład:

#include <Array.au3>

Local $aArray[4] = [1, 2, 3, 4]

$aNewArray = _ArrayPermute($aArray, ",")
_ArrayDisplay($aNewArray, "Tablica permutacji")


_ArrayReverse[edytuj]

#include <Array.au3>
_ArrayReverse ( ByRef $avArray [, $iStart = 0 [, $iEnd = 0]] )

Funkcja odwraca kolejność komórek w 1-wymiarowej tablicy. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd. W tym przypadku ustawiane jest makro @error: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta.

$avArray - nazwa przetwarzanej tablicy

$iStart - początkowy indeks obszaru odwracania kolejności komórek, domyślnie 0 czyli od indeksu [0] (początek tablicy)

$iEnd - końcowy indeks obszaru odwracania kolejności komórek, domyślnie 0 czyli do końca tablicy

Przykład:

#include <Array.au3>

Local $avArray[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

_ArrayDisplay($avArray, "Tablica wyjściowa")
_ArrayReverse($avArray)
_ArrayDisplay($avArray, "_ArrayReverse()")
_ArrayReverse($avArray, 3, 6)
_ArrayDisplay($avArray, "Od indeksu 3 do 6")


_ArrayShuffle[edytuj]

#include <Array.au3>
_ArrayShuffle ( ByRef $aArray [, $iStart_Row = 0 [, $iEnd_Row = 0 [, $iCol = 0]]] )

Funkcja tasuje losowo wiersze tablicy 1 lub 2-wymiarowej. Tasowanie może być ograniczone do podanego zakresu wierszy i wyszczególnionej kolumny. Zwraca 1 gdy sukces, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmie wartość: 1 - $aArray nie jest tablicą, 2 - $aArray ma więcej wymiarów niż 2, 3 - $iStart_Row lub $iEnd_Row po za zakresem, 4 - $iStart_Row większe od $iEnd_Row, 5 - $iCol po za zakresem.

$aArray - przetwarzana tablica, wynik działania funkcji będzie przez referencję w niej zapisany

$iStart_Row - nr początkowego wiersza

$iEnd_Row - nr końcowego wiersza

$iCol - nr tasowanej kolumny (tylko dla tablicy 2D)

Przykład:

#include <Array.au3>

Local $aArray_Base[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_ArrayDisplay($aArray_Base, "1D - oryginalna", Default, 8)

Local $aArray = $aArray_Base
_ArrayShuffle($aArray)
_ArrayDisplay($aArray, "1D - tasowane", Default, 8)

$aArray = $aArray_Base
_ArrayShuffle($aArray, 3, 8)
_ArrayDisplay($aArray, "1D - tasowane 3-8 ", Default, 8)

Local $aArray_Base[10][10]
For $i = 0 To 9
   For $j = 0 To 9
      $aArray_Base[$i][$j] = $i
   Next
Next
_ArrayDisplay($aArray_Base, "2D - oryginalna", Default, 8)

$aArray = $aArray_Base
_ArrayShuffle($aArray)
_ArrayDisplay($aArray, "2D - tasowane wszystkie wiersze", Default, 8)

$aArray = $aArray_Base
_ArrayShuffle($aArray, 3, 8, 2)
_ArrayDisplay($aArray, "2D - tasowane, kolumna 2, wiersze 3-8", Default, 8)


_ArraySort[edytuj]

#include <Array.au3>
_ArraySort ( ByRef $avArray [, $iDescending = 0 [, $iStart = 0 [, $iEnd = 0 [, $iSubItem = 0 [, $iPivot = 0]]]]] )

Funkcja sortuje komórki 1D lub 2D tablicy. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd. W tym przypadku ustawiane jest makro @error: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - $iSubItem większe niż największy indeks kolumny, 4 - tablica ma więcej niż 2 wymiary, 5 - tablica jest pusta, 6 - $iPivot użyto dla tablicy 2-wymiarowej.

$avArray - nazwa przetwarzanej tablicy

$iDescending - rodzaj sortowania, 0 - (domyślnie) sortowanie rosnące, 1 - sortowanie malejące

$iStart - początkowy indeks obszaru sortowanego, domyślnie 0 czyli od indeksu [0] (początek tablicy)

$iEnd - końcowy indeks obszaru sortowanego, domyślnie 0 czyli do końca tablicy

$iSubItem - indeks kolumny, która będzie sortowana w tablicy 2-wymiarowej

$iPivot - drugi element dzielący (pivot), domyślnie jeden element dzielący, komórka [0] (tylko dla tablic 1-wymiarowych)

UWAGA: Domyślnie funkcja używa algorytmu QuickSort. Ustawienie parametru $iPivot powoduje użycie algorytmu DualPivotSort dla tablic 1D. Może to znacznie przyśpieszyć sortowanie w przypadku dużych tablic (> 50 elementów). Niestety nie ma gwarancji, która metoda będzie szybsza dla konkretnego przypadku.

Przykład dla tablicy 1D:

#include <Array.au3>

Local $Array[] = [3, 4, 0, 6, 5, 8, 9, 2, 1, 7]
$avArray = $Array
_ArrayDisplay($avArray, "Tablica wyjściowa")
_ArraySort($avArray)
_ArrayDisplay($avArray, "Sortowanie rosnące")
$avArray = $Array
_ArraySort($avArray, 1)
_ArrayDisplay($avArray, "Sortowanie malejące")
$avArray = $Array
_ArraySort($avArray, 0, 3, 6)
_ArrayDisplay($avArray, "Rosnące od 3 do 6")
$avArray = $Array
_ArraySort($avArray, 0, 0, 0, 0, 1)
_ArrayDisplay($avArray, "Rosnące DualPivotSort")

Przykład dla tablicy 2D:

#include <Array.au3>

Local $avArray[][] = [[5, 20, 8], _
		      [4, 32, 7], _
		      [3, 16, 9], _
		      [2, 35, 0], _
		      [1, 19, 6]]

_ArrayDisplay($avArray, "$Tablica wyjściowa")
_ArraySort($avArray, 0, 0, 0, 0)
_ArrayDisplay($avArray, "Rosnąco kolumna [0]")
_ArraySort($avArray, 0, 0, 0, 1)
_ArrayDisplay($avArray, "Rosnąco kolumna [1]")
_ArraySort($avArray, 1, 0, 0, 2)
_ArrayDisplay($avArray, "Malejąco kolumna [2]")


_ArraySwap[edytuj]

#include <Array.au3>
_ArraySwap ( ByRef $vItem1, ByRef $vItem2 )

Funkcja zamienia wartości dwóch zmiennych. Nie zwraca żadnej wartości.

$vItem1 i $vItem2 - zmienne zamieniające się wartościami. Zmiennymi tymi mogą być dwie tablice, komórki dwóch lub jednej tablicy, oraz zmienne proste.

Przykład - zamiana wartości dwóch tablic:

#include <Array.au3>

Local $avArray1[] = ["świecie!"]
Local $avArray2[] = ["Wtaj", "nasz"]

_ArrayDisplay($avArray1, "Tablica wyjściowa")
_ArraySwap($avArray1, $avArray2)
_ArrayDisplay($avArray1, "Tablica po zamianie")

Przykład - zamiana wartości dwóch komórek jednej tablicy:

#include <Array.au3>

Local $avArray[] = ["nasz", "Witaj", "świecie!"]

_ArrayDisplay($avArray, "Tablica wyjściowa")
_ArraySwap($avArray[0], $avArray[1])
_ArrayDisplay($avArray, "Tablica po zamianie")


_ArrayTranspose[edytuj]

#include <Array.au3>
_ArrayTranspose ( ByRef $avArray )

Funkcja zamienia w tablicy 2-wymiarowej kolumny z wierszami. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd (makro @error przyjmuje wartość 1, np. gdy tablica nie jest 2-wymiarowa).

Przykład:

'''$avArray''' - nazwa przetwarzanej tablicy

#include <Array.au3>

Local $aArray[][] = [[1, 2],[3, 4],[5, 6]]
_ArrayDisplay($aArray, "Tablica pierwotna")
_ArrayTranspose($aArray)
_ArrayDisplay($aArray, "Tablica wynikowa")


_ArrayTrim[edytuj]

#include <Array.au3>
_ArrayTrim ( ByRef $avArray, $iTrimNum [, $iDirection = 0 [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja usuwa określoną liczbę znaków z wszystkich elementów tablicy. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd. W tym przypadku ustawiane jest makro @error: 1 - $avArray nie jest tablicą, 2 - tablica nie jest 1-wymiarowa, 3 - tablica jest pusta, 5 - $iStart > $iEnd.

$avArray - nazwa przetwarzanej tablicy

$iTrimNum - liczba znaków do usunięcia

$iDirection - kierunek usuwania, 0 - usuwa z lewej (wartość domyślna), 1 - usuwanie z prawej

$iStart - początkowy indeks obszaru usuwania znaków, domyślnie 0 czyli od indeksu [0] (początek tablicy)

$iEnd - końcowy indeks obszaru usuwania znaków, domyślnie 0 czyli do końca tablicy

Przykład:

#include <Array.au3>

Local $avArray[5]
$avArray[0] = "123"
$avArray[1] = "bc"
$avArray[2] = "cd"
$avArray[3] = "de"
$avArray[4] = "e"

_ArrayDisplay($avArray, "Tablica wyjściowa")
_ArrayTrim($avArray, 1, 1, 0, 4)
_ArrayDisplay($avArray, "Tablica po zmianie")


_ArrayUnique[edytuj]

#include <Array.au3>
_ArrayUnique ( $aArray [, $iColumn = 1 [, $iBase = Default [, $iCase = Default [, $iFlags = Default]]]] )

Zwraca jednowymiarową tablicę z kolumny 1 lub 2-wymiarowej tablicy, usuwając wszystkie duplikaty. Jeżeli wystąpił błąd makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą lub jest pustą tablicą, 2 - $iBase lub $iCase ma niewłaściwą wartość, 3 - niewłaściwa kolumna, 4 - $iFlags ma niewłaściwą wartość.

$avArray - nazwa przetwarzanej tablicy

$iColumn - nr kolumny do przetworzenia (dla tablic 2-wymiarowych), domyślnie 1 (indeks [0])

$iBase - przetwarzanie tablicy od komórki o indeksie: 0 - [0], 1 - [1]

$iCase - określa czy należy uwzględniać wielkość liter, 0 - nie (wartość domyślna, 1 - tak

$iFlags - flaga wskazuje, czy liczba zwracanych elementów powinny być zwrócone w komórce [0], 0 - nie, 1 - tak (domyślna wartość)

Przykład:

#include <Array.au3>

Local $aArray[] = [100, 200, 3, 4, 5, 1, 2, 3, "a", "A"]
_ArrayDisplay($aArray, "Tablica wyjściowa")

$aArrayUnique = _ArrayUnique($aArray,1,0,0,1)
_ArrayDisplay($aArrayUnique, "Tablica wynikowa")


_Array1DToHistogram[edytuj]

#include <Array.au3>
_Array1DToHistogram ( $aArray [, $iSizing = 100] )

Funkcja przetwarza 1-wymiarową tablicę w histogram. Zwraca histogram w postaci 1-wymiarowej tablicy. Jeżeli wystąpi błąd makro @error przyjmie wartość różną od 0 (1 oznacza,że tablica nie była 1-wymiarowa).

$aArray - nazwa przetwarzanej tablicy

$iSizing - pozwala skalować histogram, 100 - rozmiar domyślny

Przykład:

#include <Array.au3>

Dim $aHist[] = [0, -80, -49, -44, 80, 99, 8, 7, 6, 5, 4, 3, 2, 1]
$aArray = _Array1DToHistogram($aHist, 200)
_ArrayDisplay($aArray, "_Array1DToHistogram")


Przeszukiwanie tablic[edytuj]

_ArrayBinarySearch[edytuj]

#include <Array.au3>
_ArrayBinarySearch ( $avArray, $vValue [, $iStart = 0 [, $iEnd = 0]] )

Funkcja przeszukuje 1-wymiarową tablicę z użyciem algorytmy wyszukiwania binarnego. Zwraca indeks komórki z poszukiwaną wartością, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - $vValue poza wartości Min / Max, 3 - w tablicy nie znaleziono wartości $vValue, 4 - $iStart > $iEnd, 5 - tablica nie jest 1-wymiarowa, 6 - tablica jest pusta.

$avArray - nazwa przeszukiwanej tablicy

$vValue - wartość poszukiwana w tablicy

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

UWAGA:

1. Przed wyszukiwaniem binarnym tablica musi być posortowana!

2. Zwracany jest indeks pierwszej znalezionej komórki.

Przykład:

 
#include <Array.au3>

Local $avArray[] = [2, 3, 1, 0, 5 , 6, 8, 9, 5, 7, 1]

_ArrayDisplay($avArray, "Tablica wyjściowa")

; sortowanie tablicy, niezbędne przed wyszukiwaniem binarnym
_ArraySort($avArray)
_ArrayDisplay($avArray, "Tablica posortowana")

$x = 1 ; poszukiwany element
$iKeyIndex = _ArrayBinarySearch($avArray, $x)
If $iKeyIndex = -1 Then
   MsgBox(0, "", "Nie znaleziono!")
   Exit
Else
   MsgBox(0, "", "Wartość " & $x & " pod indeksem " & $iKeyIndex)
EndIf


_ArrayFindAll[edytuj]

#include <Array.au3>
_ArrayFindAll ( $avArray, $vValue [, $iStart = 0 [, $iEnd = 0 
                [, $iCase = 0 [, $iCompare = 0 [, $iSubItem = 0]]]]] )

Funkcja wyszukuje wszystkie komórki w tablicy 1 lub 2-wymiarowej, zawierające podaną wartość. Wynik zwraca w postaci 1-wymiarowej tablicy z indeksami znalezionych komórek. Jeżeli wystąpi błąd funkcja zwraca -1. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 (7) - wymiar tablicy większy niż 2, 3 - tablica jest pusta, 4 - $iStart > $iEnd, 6 - w tablicy nie znaleziono wartości $vValue.

$avArray - nazwa przeszukiwanej tablicy

$vValue - wartość poszukiwana w tablicy

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

$iCase - określa czy należy uwzględniać wielkość liter, 0 - nie (wartość domyślna), 1 - tak

$iCompare - określa sposób oceny zgodności wartości (wartość domyślna 0):

0 - zgodnie z przyjętym w AutoIt (np. jeżeli szukamy wartości 0 to: "string"=0, "1"=0, ""=0, False=0)
1 - wyszukuje wartości tekstowej wewnątrz zawartości komórki (np.: "obie"="kobiety")
2 - tylko gdy wartość i jej typ są identyczne (0=0, ale ""<>0)

$iSubItem - indeks kolumny, która będzie przeszukiwana w tablicy 2-wymiarowej

Przykład:

 
#include <Array.au3>

Local $avArray[5] = [0, 1, 2, 1, "Ala"]
Local $aiResult = _ArrayFindAll($avArray, 0)
_ArrayDisplay($avArray, "Tablica źródłowa")
_ArrayDisplay($aiResult, "Rezultat wyszukiwania")


_ArrayMax[edytuj]

#include <Array.au3>
_ArrayMax ( $avArray [, $iCompNumeric = 0 [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja zwraca największą wartość znajdującą się w tablicy, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta

$avArray - nazwa przeszukiwanej tablicy

$iCompNumeric - metoda porównania wartości, 0 - porównanie alfanumeryczne (wartość domyślna), 1 - porównanie numeryczne

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

Przykład:

 
#include <Array.au3>

Local $avArray = StringSplit("4,2,06,8,12,5,666", ",")

MsgBox(0, "Maksymalna wartość alfanumeryczna", _ArrayMax($avArray, 0, 1))
MsgBox(0, "Maksymalna wartość numeryczna", _ArrayMax($avArray, 1, 1))


_ArrayMaxIndex[edytuj]

#include <Array.au3>
_ArrayMaxIndex ( $avArray [, $iCompNumeric = 0 [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja zwraca indeks komórki zawierającej największą wartość, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta

$avArray - nazwa przeszukiwanej tablicy

$iCompNumeric - metoda porównania wartości, 0 - porównanie alfanumeryczne (wartość domyślna), 1 - porównanie numeryczne

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

Przykład:

 
#include <Array.au3>

Local $avArray = StringSplit("4,2,06,8,12,5,666", ",")

MsgBox(0, "_ArrayMaxIndex()", "Maksymalna wartość alfanumeryczna w komórce o indeksie: " & _ArrayMaxIndex($avArray, 0, 1))
MsgBox(0, "_ArrayMaxIndex()", "Maksymalna wartość numeryczna w komórce o indeksie: " & _ArrayMaxIndex($avArray, 1, 1))


_ArrayMin[edytuj]

#include <Array.au3>
_ArrayMin ( $avArray [, $iCompNumeric = 0 [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja zwraca najmniejszą wartość znajdującą się w tablicy, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta

$avArray - nazwa przeszukiwanej tablicy

$iCompNumeric - metoda porównania wartości, 0 - porównanie alfanumeryczne (wartość domyślna), 1 - porównanie numeryczne

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

Przykład:

 
#include <Array.au3>

Local $avArray = StringSplit("4,2,06,8,12,5,666", ",")

MsgBox(0, "Minimalna wartość alfanumeryczna", _ArrayMin($avArray, 0, 1))
MsgBox(0, "Minimalna wartość numeryczna", _ArrayMin($avArray, 1, 1))


_ArrayMinIndex[edytuj]

#include <Array.au3>
_ArrayMinIndex ( $avArray [, $iCompNumeric = 0 [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja zwraca indeks komórki zawierającej najmniejszą wartość, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta

$avArray - nazwa przeszukiwanej tablicy

$iCompNumeric - metoda porównania wartości, 0 - porównanie alfanumeryczne (wartość domyślna), 1 - porównanie numeryczne

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

Przykład:

 
#include <Array.au3>

Local $avArray = StringSplit("4,2,06,8,12,5,666", ",")

MsgBox(0, "_ArrayMaxIndex()", "Minimalna wartość alfanumeryczna w komórce o indeksie: " & _ArrayMinIndex($avArray, 0, 1))
MsgBox(0, "_ArrayMaxIndex()", "Minimalna wartość numeryczna w komórce o indeksie: " & _ArrayMinIndex($avArray, 1, 1))


_ArraySearch[edytuj]

#include <Array.au3>
_ArraySearch ( $avArray, $vValue [, $iStart = 0 [, $iEnd = 0 
              [, $iCase = 0 [, $iCompare = 0 [, $iForward = 1 [, $iSubItem = -1]]]]]] )

Funkcja przeszukuje 1-wymiarową lub 2-wymiarową tablicę. Zwraca indeks komórki z poszukiwaną wartością, lub -1 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość: 1 - $avArray nie jest tablicą, 2 (7) - wymiar tablicy większy niż 2, 3 - tablica jest pusta, 4 - $iStart > $iEnd, 6 - w tablicy nie znaleziono wartości $vValue.

$avArray - nazwa przeszukiwanej tablicy

$vValue - wartość poszukiwana w tablicy

$iStart - indeks komórki początkowej przeszukiwanego obszary tablicy, 0 - od indeksu [0] czyli początku tablicy (wartość domyślna)

$iEnd - indeks komórki końcowej przeszukiwanego obszary tablicy, 0 - do końca tablicy (wartość domyślna)

$iCase - określa czy należy uwzględniać wielkość liter, 0 - nie (wartość domyślna), 1 - tak

$iForward - kierunek przeszukiwania, 0 - od końca do początku, 1 - od początku do końca (wartość domyślna)

$iSubItem - indeks kolumny, która będzie przeszukiwana w tablicy 2-wymiarowej

UWAGA:

1. Funkcja jest podobne do _ArrayBinarySearch(), z tym, że tablica nie musi być posortowana oraz może być 2-wymiarowa.

2. Zwracany jest indeks pierwszej znalezionej komórki.

Przykład dla tablicy 1D:

#include <Array.au3>

Local $avArray[] = [1, 2, 3, 4, 5, 0, 9, 8, 7, 6]

_ArrayDisplay($avArray, "Tablica przeszukiwana")
$sSearch = InputBox("_ArraySearch() demo", "Wartość do znalezienia")
$iIndex = _ArraySearch($avArray, $sSearch, 0, 0, 0, 1)

If @error Then
   MsgBox(0, "Wynik wyszukiwania", "Wartości: " & $sSearch & " nie ma w tablicy")
Else
   MsgBox(0, "Wynik wyszukiwania", "Wartości: " & $sSearch & " znaleziono pod indeksem: " & $iIndex)
EndIf

Przykład dla tablicy 2D:

#include <Array.au3>

Local $avArray[][] = [["A0", "B0"], _
	              ["A1", "B1"], _
	              ["A2", "B2"], _
	              ["A3", "B3"], _
	              ["A4", "B4"], _
	              ["A5", "B5"]]

_ArrayDisplay($avArray, "$avArray")

$sSearch = InputBox("_ArraySearch() demo", "Wartość do odszukania")
$sColumn = InputBox("_ArraySearch() demo", "Kolumna do przeszukania")
$sColumn = Int($sColumn)
$iIndex = _ArraySearch($avArray, $sSearch, 0, 0, 0, 1, 1, $sColumn)

If @error Then
   MsgBox(0, "Wynik wyszukiwania", "Wartości: " & $sSearch & _
             " w kolumnie " & $sColumn & " nie znaleziono")
Else
   MsgBox(0, "Wynik wyszukiwania", "Wartość: " & $sSearch & _
             " w kolumnie: " & $sColumn & " znaleziono pod indeksem " & $iIndex)
EndIf


Eksport danych z tablicy[edytuj]

_ArrayToClip[edytuj]

#include <Array.au3>
_ArrayToClip ( $avArray [, $iStart = 0 [, $iEnd = 0]] )

Funkcja wysyła zawartość tablicy do schowka systemowego, zawartość kolejnych komórek rozdzielona jest znakiem powrotu karetki (@CR). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

$avArray - nazwa tablicy

$iStart - początkowy indeks obszaru eksportowanego, domyślnie 0 czyli od indeksu [0] (początek tablicy)

$iEnd - końcowy indeks obszaru eksportowanego, domyślnie 0 czyli do końca tablicy

Przykład:

#include <Array.au3>

Local $avArray = StringSplit("a,b,c,d,e,f,g,h,i", ",")
_ArrayToClip($avArray, 1)
MsgBox(0, "_ArrayToClip() Test", ClipGet())


_ArrayToString[edytuj]

#include <Array.au3>
_ArrayToString ( $avArray [, $sDelim = "|" [, $iStart = 0 [, $iEnd = 0]]] )

Funkcja umieszcza elementy tablicy w jednym łańcuchu znaków oddzielonych określonym separatorem i zwraca ten łańcuch (string). Jeżeli wystąpi błąd makro @error przyjmie wartość: 1 - $avArray niejest tablica, 2 - $iStart > $iEnd, 3 - tablica nie jest 1-wymiarowa, 4 - tablica jest pusta.

$avArray - nazwa tablicy

$sDelim - separator, domyślnie znak pionowej kreski (|)

$iStart - początkowy indeks obszaru eksportowanego, domyślnie 0 czyli od indeksu [0] (początek tablicy)

$iEnd - końcowy indeks obszaru eksportowanego, domyślnie 0 czyli do końca tablicy

Przykład:

#include <Array.au3>

Local $avArray[0]

For $i = 0 To 20
   _ArrayAdd($avArray, Random(-2000, 2000, 1))
Next

_ArrayDisplay($avArray, "Tablica źródłowa")
$str = _ArrayToString($avArray, @CR, 1, 7)
MsgBox(0,"_ArrayToString()", "Wyeksportowano:" & @CR & $str)