Тема: AHK: Смещение ячеек массива
как сместить все значения массива
допустим есть массив [1,2,3,4,5]
мне нужно удалить 2, будет [1,3,4,5]
или допустим 3 нужно, будет[1,2,4,5]
и так далее
помогите, буду очень благодарен!
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
как сместить все значения массива
допустим есть массив [1,2,3,4,5]
мне нужно удалить 2, будет [1,3,4,5]
или допустим 3 нужно, будет[1,2,4,5]
и так далее
помогите, буду очень благодарен!
RemoveAt
arr := [1,2,3,4,5]
MsgBox % PrintSimpleArray(arr)
arr.RemoveAt(2)
MsgBox % PrintSimpleArray(arr)
PrintSimpleArray(arr) {
for k, v in arr
str .= v ", "
Return "[" RTrim(str, ", ") "]"
}
serzh82saratov
спасибо!
смотрите, данные в массиве у меня такие [LD-20, FG-25, HN-30, JF-35] (примерно)
если я удалю допустим 2 ячейку, то должно быть так [LD-20, NH-25,JF-30]
поможете?
(примерно)
Как же тут поможешь, если у вас что то примерно.
Если было [LD-20, FG-25, HN-30, JF-35] то должно стать [LD-20, HN-30, JF-35] а не [LD-20, NH-25,JF-30].
arr := ["LD-20", "FG-25", "HN-30", "JF-35"]
MsgBox % PrintSimpleArray(arr)
arr.RemoveAt(2)
MsgBox % PrintSimpleArray(arr)
PrintSimpleArray(arr) {
for k, v in arr
str .= (v + 0 != "" ? v : """" v """") ", "
Return "[" RTrim(str, ", ") "]"
}
serzh82saratov
так в том то и дело что HN-30 нужно заменить на HN-25 a JF-35 на 30
значения могут быть разные
Так это совсем другое дело. Встроенных методов для этого нет. Сейчас я не готов вам помочь, я баиньки, может завтра.
Вам пока советую почитать правила форума. Предложения начинаются с заглавных, и заканчиваются точкой.
serzh82saratov
Хорошо. Спокойной ночи. Я пока что сам попробую, если выйдет я отпишу.
Нужны точные данные что удалить, либо правило - по какому признаку определить.
Вот функция которая вышла. Только кривая очень.
removeinarrayandreplace(array, number) {
Loop % Array.MaxIndex() {
RegExMatch(array[number+1], "(.*-)(\d{1,2})", var)
array[number+1] := var1 "" var2+5
}
array.RemoveAt(number)
}
Вашу не запускал, у меня так получилось, если не прибавлять по 5, а просто переставлять числа.
arr := ["LD-20", "FG-25", "HN-30", "JF-35"]
MsgBox % PrintSimpleArray(arr)
arr := RemoveAt(2, arr)
MsgBox % PrintSimpleArray(arr)
Return
RemoveAt(At, arr) {
If (At < 1 || At > arr.Count())
Return arr
for k, v in arr, newarr := []
{
If (k < At)
newarr.Push(v)
Else If (k > At)
newarr.Push(StrSplit(v, "-")[1] "-" StrSplit(arr[k - 1], "-")[2])
}
Return newarr
}
PrintSimpleArray(arr) {
for k, v in arr
str .= (v + 0 != "" ? v : """" v """") ", "
Return "[" RTrim(str, ", ") "]"
}
serzh82saratov
Спасибо большое!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться