#include <Array.au3>
Opt('MustDeclareVars', 1)
Global $aArray[11][2] = [[10],[412, 0],[420, "."],[420, "."],[423, 0],[423, 0],[425, 3],['Вася'],['вася']], _
$aArray_1 = $aArray, $aArray_2 = $aArray, $aArray_3[1][2], $aArray_4[5]
_Array2DUnique($aArray)
_ArrayDisplay($aArray, @extended & ' - ' & @error)
_Array2DUnique($aArray_1, 1, 1)
_ArrayDisplay($aArray_1, @extended & ' - ' & @error)
_Array2DUnique($aArray_2, 1.5)
_ArrayDisplay($aArray_2, @extended & ' - ' & @error)
_Array2DUnique($aArray_3, 1)
_ArrayDisplay($aArray_3, @extended & ' - ' & @error)
_Array2DUnique($aArray_4)
_ArrayDisplay($aArray_4, @extended & ' - ' & @error)
#cs
Удалит в 2-мерном массиве все дублирующиеся строки (если дан $a_Array[n][q], то строка = $a_Array[i][0] & $a_Array[i][1] & ... & $a_Array[i][q - 1]).
$a_Array - 2-мерный массив.
$i_Start - индекс строки, начиная с которой идет проверка (только 0 или 1) (-1 = 0, Default = 0). По умолчанию 0.
$i_Casesense - 0 - не учитывать регистр, 1 - учитывать. По умолчанию 0.
При успехе вернет 1, флаг @error = 0 и флаг @extended = кол-во удаленных (повторяющихся) строк.
При неудаче вернет 0 и флаг @error =
1 - $a_Array не 2-мерный массив.
2 - $i_Start - некорректное значение.
3 - Ошибка создания объекта Scripting.Dictionary
#ce
Func _Array2DUnique(ByRef $a_Array, $i_Start = 0, $i_Casesense = 0)
Local $o_Dict, $i_Row, $i_Column, $a_TempArray = $a_Array, $i_Count, $s_Key
If UBound($a_TempArray, 0) <> 2 Then Return SetError(1, 0, 0)
$i_Row = UBound($a_TempArray, 1)
$i_Start = Number($i_Start)
Switch $i_Start
Case 0, 1
Case -1, Default
$i_Start = 0
Case Else
Return SetError(2, 0, 0)
EndSwitch
If $i_Row - $i_Start < 1 Then Return SetError(2, 0, 0)
$i_Count = $i_Start
$i_Column = UBound($a_Array, 2)
$o_Dict = ObjCreate('Scripting.Dictionary')
If @error Then Return SetError(3, 0, 0)
$o_Dict.CompareMode = Number(Not $i_Casesense)
For $i = $i_Start To $i_Row - 1
$s_Key = ''
For $j = 0 To $i_Column - 1
$s_Key &= $a_TempArray[$i][$j]
Next
If $o_Dict.Exists($s_Key) Then ContinueLoop
$o_Dict.Item($s_Key)
For $j = 0 To $i_Column - 1
$a_Array[$i_Count][$j] = $a_TempArray[$i][$j]
Next
$i_Count += 1
Next
If $i_Count <> $i_Row Then ReDim $a_Array[$i_Count][$i_Column]
Return SetExtended($i_Row - $i_Count, 1)
EndFunc ;==>_Array2DUnique