1

Тема: AHK: В чём разница между Array.Remove(Index) и Array.RemoveAt(Index)

В общем, сабж. В чём разница между этими командами? Ведь выполняют они одно и то же.

Пример:

TestStr := "111 222 333 444"

; Режем массив Test1 из строки
Test1 := StrSplit(TestStr, " ")
; и удаляем 2-й элемент через Array.RemoveAt(Index)
Test1.RemoveAt(2)

; Выводим массив Test1
MsgBox, % "Test1`nLength: " Test1.MaxIndex() "`n`nItem #1: " Test1[1] "`nItem #2: " Test1[2] "`nItem #3: " Test1[3] "`nItem #4: " Test1[4]


; Режем массив Test2 из строки
Test2 := StrSplit(TestStr, " ")
; и удаляем 2-й элемент через Array.RemoveAt(Index)
Test2.Remove(2)

; Выводим массив Test2
MsgBox, % "Test2`nLength: " Test2.MaxIndex() "`n`nItem #1: " Test2[1] "`nItem #2: " Test2[2] "`nItem #3: " Test2[3] "`nItem #4: " Test2[4]

На выходе получим абсолютно идентичный результат.

2 (изменено: yalanne, 2015-12-27 01:59:18)

Re: AHK: В чём разница между Array.Remove(Index) и Array.RemoveAt(Index)

Remove это из старых версий ahk. Эта команда может удалять элементы из массива или очищать(устанавливать пустое значение).

+ Если не указывать параметров, то удаляется последний элемент
x := ["A","B","C","D","E"]

MsgBox % "Элемент: " x.Remove()

MsgBox % "A`t" x[1]
     . "`nB`t" x[2]
     . "`nC`t" x[3]
     . "`nD`t" x[4]
     . "`nE`t" x[5]
+ Если указать первый параметр, это номер элемента. Все то что после него смещается.
x := ["A","B","C","D","E"]

MsgBox % "Элемент: " x.Remove(3)

MsgBox % "A`t" x[1]
     . "`nB`t" x[2]
     . "`nC`t" x[3]
     . "`nD`t" x[4]
     . "`nE`t" x[5]
+ Если указать второй параметр как пустые скобки, То этот элемент очищается.
x := ["A","B","C","D","E"]

MsgBox % "Элемент: " x.Remove(3,"")

MsgBox % "A`t" x[1]
     . "`nB`t" x[2]
     . "`nC`t" x[3]
     . "`nD`t" x[4]
     . "`nE`t" x[5]
+ Если указать второй параметр как номер элемента, то в диапазоне от первого до другого элемента все удалится
x := ["A","B","C","D","E"]

MsgBox % "Элементов: " x.Remove(1,3)

MsgBox % "A`t" x[1]
     . "`nB`t" x[2]
     . "`nC`t" x[3]
     . "`nD`t" x[4]
     . "`nE`t" x[5]

Очистить группу элементов через remove нельзя.

В новых версиях ahk команду remove заменяют RemoveAt, Delete и pop.
RemoveAt может только удалять элемент или группу элементов.
Delete может только очищать элемент или группу элементов.
pop может только удалять последний элемент из списка.
В RemoveAt и Delete второй параметр указывается не точной позицией элемента как в remove, а количество элементов.

3

Re: AHK: В чём разница между Array.Remove(Index) и Array.RemoveAt(Index)

Спасибо большое за разъяснение.
Теперь буду использовать `RemoveAt` вместо `Remove`.