ການບໍລິການ ScriptForge.Array (SF_Array)

ເນື້ອໃນ

# ການບໍລິການ ScriptForge.Array

ສະໜອງຊຸດວິທີການສຳລັບການຈັດການ ແລະ ປ່ຽນແປງອາເຣແບບໜຶ່ງມິຕິ (ເວັກເຕີ) ແລະ ອາເຣແບບສອງມິຕິ (ມາຕຣິກ). ເຊິ່ງລວມເຖິງການດຳເນີນການແບບເຊັດ (Set), ການຈັດລຽງ, ການນຳເຂົ້າຈາກ ແລະ ການສົ່ງອອກໄປຍັງໄຟລ໌ຂໍ້ຄວາມ.

ອາເຣທີ່ມີຫຼາຍກວ່າສອງມິຕິບໍ່ສາມາດໃຊ້ກັບວິທີການໃນການບໍລິການນີ້ໄດ້, ຍົກເວັ້ນພຽງແຕ່ວິທີການ CountDims ທີ່ຮອງຮັບອາເຣທີ່ມີຈຳນວນມິຕິເທົ່າໃດກໍໄດ້.

ລາຍການໃນອາເຣອາດຈະປະກອບມີຄ່າປະເພດໃດກໍໄດ້, ລວມທັງອາເຣຍ່ອຍ.

ອາເຣໜຶ່ງມິຕິທີ່ປະກອບມີພຽງແຕ່ອາເຣຍ່ອຍໜຶ່ງມິຕິຈະຖືກເອີ້ນວ່າ ອາເຣຂໍ້ມູນ (data arrays). ພວກມັນເໝາະສຳລັບການແລກປ່ຽນຂໍ້ມູນຕາຕະລາງກັບສະຄຣິບ Python ແລະ ແຜ່ນງານ Calc.

## ການເອີ້ນໃຊ້ບໍລິການ

ກ່ອນທີ່ຈະໃຊ້ການບໍລິການ 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 ມີການຮອງຮັບ list ແລະ tuple ໃນຕົວ, ວິທີການສ່ວນໃຫຍ່ໃນການບໍລິການ Array ຈຶ່ງມີໃຫ້ໃຊ້ສຳລັບສະຄຣິບ Basic ເທົ່ານັ້ນ. ຂໍ້ຍົກເວັ້ນດຽວແມ່ນ ImportFromCSVFile ເຊິ່ງຮອງຮັບທັງໃນ Basic ແລະ Python.

ລາຍຊື່ວິທີການໃນການບໍລິການ Array
Append AppendColumn AppendRow Contains ConvertFromDataArray ConvertToDataArray ConvertToDictionary ConvertToRange 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

ອາຄິວເມັ້ນທຳອິດຂອງວິທີການສ່ວນໃຫຍ່ແມ່ນວັດຖຸອາເຣທີ່ຈະນຳມາພິຈາລະນາ. ມັນຈະຖືກສົ່ງຜ່ານແບບການອ້າງອີງ (by reference) ແລະ ຄ່າເດີມຈະບໍ່ປ່ຽນແປງ. ວິທີການຕ່າງໆເຊັ່ນ 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: ອາເຣທີ່ມີຢູ່ແລ້ວ, ອາດຈະເປັນອາເຣວ່າງກໍໄດ້. ຖ້າອາເຣນັ້ນມີພຽງມິຕິດຽວ, ມັນຈະຖືກຖືວ່າເປັນຄໍລຳທຳອິດຂອງອາເຣສອງມິຕິທີ່ໄດ້.

column: ອາເຣໜຶ່ງມິຕິທີ່ມີຈຳນວນລາຍການເທົ່າກັບຈຳນວນແຖວໃນ 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 ມິຕິທີ່ໄດ້.

row: ອາເຣໜຶ່ງມິຕິທີ່ມີຈຳນວນລາຍການເທົ່າກັບຈຳນວນຄໍລຳໃນ 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).
ຜົນໄດ້ຮັບຂອງວິທີການນີ້ອາດຈະຜິດພາດໄດ້ ຖ້າລະບຸວ່າອາເຣຈັດລຽງແລ້ວ ແຕ່ຄວາມຈິງແລ້ວບໍ່ໄດ້ຈັດລຽງ.
ຈະໃຊ້ການຄົ້ນຫາແບບໄບນາຣີ (Binary search) ເມື່ອອາເຣຖືກຈັດລຽງ, ຖ້າບໍ່ດັ່ງນັ້ນ ຈະເປັນການກວດສອບແຕ່ເທິງລົງລຸ່ມ ແລະ ຈະຂ້າມລາຍການ Empty ກັບ Null ໄປ.

### ໄວຍາກອນ:

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

### ພາຣາມິເຕີ:

array_1d: ອາເຣທີ່ຈະກວດສອບ.

tofind: ຕົວເລກ, ວັນທີ ຫຼື ຂໍ້ຄວາມທີ່ຈະຄົ້ນຫາ.

casesensitive: ໃຊ້ສຳລັບການປຽບທຽບຂໍ້ຄວາມເທົ່ານັ້ນ (ຄ່າເລີ່ມຕົ້ນ = 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

## ConvertFromDataArray

ແປງອາເຣຂໍ້ມູນໃຫ້ເປັນອາເຣ Basic.
ອາເຣຂໍ້ມູນແມ່ນອາເຣຂອງອາເຣຍ່ອຍ. ເມື່ອມີການຮ້ອງຂໍ, ລາຍການຜົນໄດ້ຮັບແຕ່ລະອັນຈະຖືກປ່ຽນໃຫ້ເປັນຂໍ້ຄວາມ ຫຼື ຕົວເລກທົດສະນິຍົມ (doubles) ເທົ່ານັ້ນ.

ວິທີການນີ້ຈະສົ່ງຄືນຄ່າສະກາລາ, ອາເຣ 1D ທີ່ເລີ່ມຈາກສູນ ຫຼື ອາເຣ 2D ທີ່ເລີ່ມຈາກສູນ.
ຈຳນວນຄໍລຳໃນອາເຣ 2D ທີ່ໄດ້ຈະເທົ່າກັບຈຳນວນລາຍການໃນອາເຣຍ່ອຍທີ 1. ຖ້າອາເຣຍ່ອຍຕໍ່ໄປມີຂະໜາດຕ່າງກັນ, ແຖວຕໍ່ໄປຈະຖືກຕື່ມດ້ວຍອາຄິວເມັ້ນ fillvalue ຫຼື ຖືກຕັດອອກ.

### ໄວຍາກອນ:

svc.ConvertFromDataArray(dataarray: any[any[0..*], ...], isrange: bool = False, fillvalue: str = ''): any[0..*, 0..*]

### ພາຣາມິເຕີ:

dataarray: ອາເຣຂອງອາເຣຍ່ອຍ. ທັງອາເຣ ແລະ ອາເຣຍ່ອຍຕ້ອງເລີ່ມຈາກສູນ.
ໂດຍທົ່ວໄປແລ້ວ ອາເຣຂໍ້ມູນຈະເປັນຜົນໄດ້ຮັບຈາກ

- ວິທີການ session.ExecuteCalcFunction()

- ສະຄຣິບ Python ທີ່ສົ່ງຄືນຄ່າເປັນ tuple ຂອງ tuples

- ວິທີການ getDataArray() ຈາກອິນເຕີເຟສ com.sun.star.sheet.XCellRangeData

isrange: ເມື່ອເປັນ True (ຄ່າເລີ່ມຕົ້ນ = False), ລາຍການຕ່າງໆຈະຖືກແປງເປັນຂໍ້ຄວາມ ຫຼື ຕົວເລກທົດສະນິຍົມ.

fillvalue: ວິທີແທນບ່ອນລາຍການທີ່ຂາດຫາຍໄປ. ຄ່າເລີ່ມຕົ້ນ = ຂໍ້ຄວາມວ່າງ.

### ຕົວຢ່າງ:

        Dim dataarray As Variant, array2D As Variant
        dataarray = Array(Array("Col1", "Col2", "Col3"), Array(10, 20, 30))
        array2D = SF_Array.ConvertFromDataArray(dataarray)
        MsgBox array2D(1, 2) ' 30

## ConvertToDataArray

ສ້າງອາເຣຂໍ້ມູນຈາກຄ່າສະກາລາ, ອາເຣ 1D ຫຼື ອາເຣ 2D.
ອາເຣຂໍ້ມູນແມ່ນອາເຣທີ່ເລີ່ມຈາກສູນຂອງອາເຣຍ່ອຍທີ່ເລີ່ມຈາກສູນ. ເມື່ອມີການຮ້ອງຂໍ, ລາຍການຜົນໄດ້ຮັບແຕ່ລະອັນຈະຖືກປ່ຽນໃຫ້ເປັນຂໍ້ຄວາມ ຫຼື ຕົວເລກທົດສະນິຍົມເທົ່ານັ້ນ.

ອາເຣຂໍ້ມູນທີ່ສົ່ງຄືນໂດຍທົ່ວໄປແມ່ນໃຊ້ເປັນ

- tuple ຂອງ (sub)tuples ທີ່ສົ່ງໄປຍັງສະຄຣິບ Python

- ອາຄິວເມັ້ນຂອງວິທີການ setDataArray() ຈາກອິນເຕີເຟສ com.sun.star.sheet.XCellRangeData

### ໄວຍາກອນ:

svc.ConvertToDataArray(data: any[0..*, 0..*], isrange: bool = False, rows: int = 0, columns: int = 0): any[any[0..*], ...]

### ພາຣາມິເຕີ:

data: ຄ່າສະກາລາ, ອາເຣ 1D ຫຼື 2D ທີ່ນຳເຂົ້າ.

isrange: ເມື່ອເປັນ True (ຄ່າເລີ່ມຕົ້ນ = False), ລາຍການໃນອາເຣຈະຖືກເກັບໄວ້ເປັນຂໍ້ຄວາມ (ທີ່ອາດຈະວ່າງ) ຫຼື ຕົວເລກທົດສະນິຍົມເທົ່ານັ້ນໃນອາເຣຂໍ້ມູນ.

rows, columns: ຈຳນວນແຖວ ຫຼື ຄໍລຳຂອງອາເຣຂໍ້ມູນທີ່ຈະສົ່ງຄືນ. ເມື່ອເກີນຂອບເຂດຂອງ data, ຈະຕື່ມດ້ວຍຂໍ້ຄວາມວ່າງ. ຖ້າ rows = 1 ແລະ ອາເຣນຳເຂົ້າເປັນເວັກເຕີ, ອາເຣຂໍ້ມູນຈະຖືກຈັດວາງຕາມແນວນອນ (ໂດຍປົກກະຕິ ເວັກເຕີຈະຈັດວາງຕາມແນວຕັ້ງ). ຖ້າບໍ່ລະບຸ, ຂະໜາດຂອງຜົນໄດ້ຮັບຈະຖືກກຳນົດໂດຍອາເຣນຳເຂົ້າ.

### ຕົວຢ່າງ:

        Dim data As Variant, dataarray As Variant
        data = Array(1, 2, 3)
        data = SF_Array.AppendRow(data, Array(4, 5, 6))
        dataarray = SF_Array.ConvertToDataArray(data)
        MsgBox dataarray(1)(2) ' 6

## ConvertToDictionary

ເກັບເນື້ອໃນຂອງອາເຣທີ່ມີ 2 ຄໍລຳເຂົ້າໃນວັດຖຸ ScriptForge.Dictionary.
ຄີ (Key) ຈະຖືກດຶງມາຈາກຄໍລຳທຳອິດ, ແລະ ລາຍການ (Item) ຈາກຄໍລຳທີສອງ.

### ໄວຍາກອນ:

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

### ພາຣາມິເຕີ:

array_2d: ຂໍ້ມູນທີ່ຈະແປງເປັນວັດຖຸ ScriptForge.Dictionary.

- ຄໍລຳທຳອິດຕ້ອງປະກອບມີແຕ່ຂໍ້ຄວາມທີ່ມີຄວາມຍາວຫຼາຍກວ່າສູນເທົ່ານັ້ນ, ໂດຍຈະລຽງລຳດັບແນວໃດກໍໄດ້. ຄ່າເຫຼົ່ານີ້ຈະຖືກໃຊ້ເປັນປ້າຍຊື່ (Labels) ໃນດິກຊັນນາຣີ.

- ຄໍລຳທີສອງປະກອບມີຂໍ້ມູນທີ່ຈະຖືກເຊື່ອມໂຍງກັບປ້າຍຊື່ທີ່ກົງກັນໃນດິກຊັນນາຣີ.

### ຕົວຢ່າງ:

        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

## ConvertToRange

ສ້າງເນື້ອໃນຂອບເຂດເຊລທີ່ຖືກຕ້ອງຈາກຄ່າສະກາລາ, ອາເຣ 1D, ອາເຣ 2D ຫຼື ອາເຣຂໍ້ມູນ (ອາເຣຂໍ້ມູນແມ່ນອາເຣທີ່ເລີ່ມຈາກສູນຂອງອາເຣຍ່ອຍທີ່ເລີ່ມຈາກສູນ). ຂອບເຂດເລີ່ມຕົ້ນຂອງອາເຣຈະຖືກຮັກສາໄວ້ໃນຜົນໄດ້ຮັບ.

ລາຍການແຕ່ລະອັນຈະຖືກປ່ຽນເປັນຂໍ້ຄວາມ ຫຼື ຕົວເລກທົດສະນິຍົມສະເໝີ, ລວມທັງຄ່າບູລີນ ຫຼື ວັນທີ.

ຄ່າສະກາລາ ຫຼື ອາເຣ 2D ທີ່ສົ່ງຄືນແມ່ນອາຄິວເມັ້ນທີ່ຖືກຕ້ອງຂອງວິທີການ session.ExecuteCalcFunction(). ສິ່ງນີ້ມີປະໂຫຍດຫຼາຍໃນກໍລະນີຂອງຟັງຊັນອາເຣ [ທີ່ຊັບຊ້ອນ].

### ໄວຍາກອນ:

svc.ConvertToRange(data: any[0..*, 0..*], direction: str = 'V' | 'H'): any[0..*, 0..*]

### ພາຣາມິເຕີ:

data: ຄ່າສະກາລາ, ອາເຣ 1D, ອາເຣ 2D ຫຼື ອາເຣຂໍ້ມູນທີ່ນຳເຂົ້າ.

direction: ການຈັດວາງຂອງຂອບເຂດເມື່ອມັນເປັນເວັກເຕີ, ສາມາດເປັນ "V" [ແນວຕັ້ງ, ຄ່າເລີ່ມຕົ້ນ] ຫຼື "H" [ແນວນອນ].

### ຕົວຢ່າງ:

        Dim session As Variant  :  session = CreateScriptService"Session")
        Dim matrix As Variant, result As Variant
        matrix = Array(-1, 2, 3)
        matrix = SF_Array.AppendRow(matrix, Array(4, -5, 6))
        matrix = SF_Array.AppendRow(matrix, Array(7, 8, -9))
        result = session.ExecuteCalcFunction("ABS", SF_Array.ConvertToRange(matrix))
        MsgBox result(2)(2) ' 9 - result is a data array

## Copy

ສ້າງສຳເນົາຂອງອາເຣ 1D ຫຼື 2D.

### ໄວຍາກອນ:

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

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

### ພາຣາມິເຕີ:

array_nd: ອາເຣ 1D ຫຼື 2D ທີ່ຈະເຮັດສຳເນົາ.

### ຕົວຢ່າງ:

ການກຳນົດຄ່າແບບທຳມະດາຂອງວັດຖຸ 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

ສ້າງເຊັດໃນຮູບແບບອາເຣທີ່ເລີ່ມຈາກສູນ ໂດຍໃຊ້ຕົວດຳເນີນການຜົນຕ່າງ (difference) ກັບອາເຣນຳເຂົ້າສອງອັນ. ລາຍການຜົນໄດ້ຮັບຈະມາຈາກອາເຣທຳອິດ ແລະ ບໍ່ມີຢູ່ໃນອາເຣທີສອງ.
ອາເຣທີ່ໄດ້ຈະຖືກຈັດລຽງຕາມລຳດັບຈາກນ້ອຍໄປຫາຫຼາຍ.
ທັງສອງອາເຣນຳເຂົ້າມີຂໍ້ມູນປະເພດດຽວກັນທັງໝົດ, ລາຍການຂອງພວກມັນຕ້ອງເປັນສະກາລາປະເພດດຽວກັນ. ຫ້າມມີລາຍການ Empty ແລະ Null.
ການປຽບທຽບຂໍ້ຄວາມສາມາດກຳນົດໃຫ້ກວດສອບຕົວພິມໃຫຍ່-ນ້ອຍໄດ້.

### ໄວຍາກອນ:

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

### ພາຣາມິເຕີ:

array1_1d: ອາເຣອ້າງອີງ 1 ມິຕິ, ເຊິ່ງລາຍການຂອງມັນຈະຖືກກວດສອບເພື່ອເອົາອອກ.

array2_1d: ອາເຣ 1 ມິຕິ, ເຊິ່ງລາຍການຂອງມັນຈະຖືກນຳໄປລົບອອກຈາກອາເຣນຳເຂົ້າທຳອິດ.

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

ລວບລວມທຸກລາຍການຂອງອາເຣ ແລະ ທຸກລາຍການໃນອາເຣຍ່ອຍຂອງມັນເຂົ້າເປັນອາເຣໃໝ່ອັນດຽວໂດຍບໍ່ມີອາເຣຍ່ອຍ. ອາເຣຍ່ອຍທີ່ວ່າງຈະຖືກຂ້າມໄປ ແລະ ອາເຣຍ່ອຍທີ່ມີຈຳນວນມິຕິຫຼາຍກວ່າໜຶ່ງຈະບໍ່ຖືກເຮັດໃຫ້ແປ (flattened).

### ໄວຍາກອນ:

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 ເພື່ອລວມຊຸດຂອງອາເຣ 1D ເຂົ້າເປັນອາເຣ 1D ອັນດຽວ.

### ຕົວຢ່າງ:

ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງຂອງວິທີການລວມວິທີການ 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)
        'ເຊື່ອມຕໍ່ສາມອາເຣເຂົ້າເປັນອາເຣ 1D ອັນດຽວ
        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 (comma-separated values). ເຄື່ອງໝາຍຈຸດອາດຈະຖືກແທນທີ່ດ້ວຍຕົວອັກສອນໃດໆກໍໄດ້.

ຮູບແບບ CSV ທີ່ນຳໃຊ້ແມ່ນໄດ້ອະທິບາຍໄວ້ໃນ IETF Common Format and MIME Type for CSV Files.

ແຕ່ລະແຖວໃນໄຟລ໌ປະກອບມີໜຶ່ງເຣັກຄອດທີ່ສົມບູນ (ບໍ່ອະນຸຍາດໃຫ້ແຍກແຖວ).
ແນວໃດກໍຕາມ ລຳດັບເຊັ່ນ \n, \t, ... ຈະບໍ່ມີການປ່ຽນແປງ. ໃຫ້ໃຊ້ວິທີການ SF_String.Unescape() ເພື່ອຈັດການພວກມັນ.

ວິທີການນີ້ຈະສົ່ງຄືນອາເຣສອງມິຕິ ເຊິ່ງແຖວຕ່າງໆຈະກົງກັບແຕ່ລະເຣັກຄອດທີ່ອ່ານຈາກໄຟລ໌ ແລະ ຄໍລຳຕ່າງໆຈະກົງກັບແຕ່ລະຟີວ (Field) ຂອງເຣັກຄອດ. ຈະບໍ່ມີການກວດສອບຄວາມສອດຄ່ອງຂອງປະເພດຂໍ້ມູນໃນແຕ່ລະຄໍລຳ. ຈະມີການຄາດເດົາທີ່ດີທີ່ສຸດເພື່ອລະບຸປະເພດຕົວເລກ ແລະ ວັນທີ.

ຖ້າແຖວໃດໜຶ່ງມີຈຳນວນຟີວນ້ອຍກວ່າ ຫຼື ຫຼາຍກວ່າແຖວທຳອິດໃນໄຟລ໌, ຈະມີການແຈ້ງຂໍ້ຜິດພາດ (exception). ສ່ວນແຖວວ່າງຈະຖືກຂ້າມໄປ. ຖ້າຂະໜາດຂອງໄຟລ໌ເກີນຂີດຈຳກັດຂອງຈຳນວນລາຍການ, ຈະມີການແຈ້ງເຕືອນ ແລະ ອາເຣຈະຖືກຕັດອອກ.

### ໄວຍາກອນ:

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

### ພາຣາມິເຕີ:

filename: ຊື່ຂອງໄຟລ໌ຂໍ້ຄວາມທີ່ມີຂໍ້ມູນ. ຊື່ຕ້ອງຖືກລະບຸຕາມຄຸນສົມບັດ FileNaming ປະຈຸບັນຂອງການບໍລິການ SF_FileSystem.

delimiter: ຕົວອັກສອນດຽວ, ປົກກະຕິແລ້ວແມ່ນເຄື່ອງໝາຍຈຸດ, ຈຸດຈ້ຳ ຫຼື ຕົວອັກສອນ TAB (ຄ່າເລີ່ມຕົ້ນ = ",").

dateformat: ຈະມີກົນໄກພິເສດຈັດການວັນທີເມື່ອ dateformat ເປັນ "YYYY-MM-DD", "DD-MM-YYYY" ຫຼື "MM-DD-YYYY". ເຄື່ອງໝາຍຂີດ (-) ອາດຈະຖືກແທນທີ່ດ້ວຍຈຸດ (.), ສະແລັດ (/) ຫຼື ຍະວ່າງ. ຮູບແບບວັນທີອື່ນໆຈະຖືກຂ້າມໄປ. ວັນທີທີ່ເປັນຂໍ້ຄວາມວ່າງ "" ຈະຖືກຖືວ່າເປັນຂໍ້ຄວາມທຳມະດາ.

### ຕົວຢ່າງ:

ຕົວຢ່າງໄຟລ໌ CSV "myFile.csv" ທີ່ມີເນື້ອໃນດັ່ງນີ້:

Name,DateOfBirth,Address,City

Anna,2002/03/31,"Rue de l'église, 21",Toulouse

Fred,1998/05/04,"Rue Albert Einstein, 113A",Carcassonne

ຕົວຢ່າງລຸ່ມນີ້ໃນ Basic ແລະ Python ອ່ານເນື້ອໃນຂອງໄຟລ໌ CSV ເຂົ້າໃນວັດຖຸ Array.

##### ໃນ Basic

        Dim arr As Variant
        arr = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "YYYY/MM/DD")
        MsgBox arr(0, 3) ' City
        MsgBox arr(1, 2) ' Rue de l'église, 21
        MsgBox arr(1, 3) ' Toulouse

##### ໃນ Python

        from scriptforge import CreateScriptService
        svc = CreateScriptService("Array")
        bas = CreateScriptService("Basic")
        arr = svc.ImportFromCSVFile(r"C:\Temp\myFile.csv", dateformat = "YYYY/MM/DD")
        bas.MsgBox(arr[0][3]) # City
        bas.MsgBox(arr[1][2]) # Rue de l'église, 21
        bas.MsgBox(arr[1][3]) # Toulouse

## 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

ແຊກລາຍການທີ່ລະບຸໃນອາຄິວເມັ້ນເຂົ້າໄປກ່ອນດັດຊະນີ (index) ທີ່ກຳນົດຂອງອາເຣ.
ອາຄິວເມັ້ນຕ່າງໆຈະຖືກແຊກເຂົ້າໄປໂດຍກົງ. ແຕ່ລະອັນອາດຈະເປັນສະກາລາປະເພດໃດກໍໄດ້ ຫຼື ເປັນອາເຣຍ່ອຍ.

### ໄວຍາກອນ:

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

ສ້າງເຊັດໃນຮູບແບບອາເຣທີ່ເລີ່ມຈາກສູນ ໂດຍໃຊ້ຕົວດຳເນີນການສ່ວນຮ່ວມ (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: ແຕ່ລະລາຍການຕ້ອງເປັນຂໍ້ຄວາມ, ຕົວເລກ, ວັນທີ ຫຼື ບູລີນ.
ວັນທີຈະຖືກແປງເປັນຮູບແບບ YYYY-MM-DD hh:mm:ss.
ລາຍການທີ່ບໍ່ຖືກຕ້ອງຈະຖືກແທນດ້ວຍຂໍ້ຄວາມວ່າງ.

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

ສົ່ງຄືນອາເຣໜຶ່ງມິຕິແບບປີ້ນກັບ (reversed).

### ໄວຍາກອນ:

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

ສົ່ງຄືນອາເຣໜຶ່ງມິຕິແບບສຸ່ມລຳດັບ (permutation).

### ໄວຍາກອນ:

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

### ພາຣາມິເຕີ:

array_1d: ອາເຣທີ່ຈະສຸ່ມລຳດັບ.

### ຕົວຢ່າງ:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' ຕອນນີ້ອາເຣ "a" ຢູ່ໃນລຳດັບແບບສຸ່ມ, ເຊັ່ນ (2, 3, 1, 4)

## Slice

ສົ່ງຄືນສ່ວນຍ່ອຍ (subset) ຂອງອາເຣໜຶ່ງມິຕິ.

### ໄວຍາກອນ:

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

ສະຫຼັບແຖວ ແລະ ຄໍລຳໃນອາເຣສອງມິຕິ (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 ແລະ ລາຍການທີ່ວ່າງທັງໝົດອອກຈາກອາເຣໜຶ່ງມິຕິ.
ຂໍ້ຄວາມຕ່າງໆຈະຖືກຕັດຍະວ່າງຫົວທ້າຍອອກດ້ວຍຟັງຊັນ Trim() ຂອງ LibreOffice Basic.

### ໄວຍາກອນ:

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

ສ້າງເຊັດໃນຮູບແບບອາເຣທີ່ເລີ່ມຈາກສູນ ໂດຍໃຊ້ຕົວດຳເນີນການຢູເນຍ (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")

ຣູທີນ ຫຼື ຕົວລະບຸ Basic ຂອງ ScriptForge ທັງໝົດທີ່ຂຶ້ນຕົ້ນດ້ວຍເຄື່ອງໝາຍຂີດກ້ອງ "_" ແມ່ນສະຫງວນໄວ້ສຳລັບໃຊ້ພາຍໃນ. ພວກມັນບໍ່ໄດ້ມີໄວ້ໃຫ້ໃຊ້ໃນມາໂຄຣ Basic ຫຼື ສະຄຣິບ Python.

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ຟັງຊັນອາເຣ

ການໃຊ້ຟັງຊັນ Calc ໃນມາກໂຄ

ບໍລິການ ScriptForge.Dictionary

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!