|
|
|
Сравнение массивов, Сравнение массивов |
|
|
handness |
21.10.2021, 23:31
|
Neophyte
Сообщений: 27
Регистрация: 25.7.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.026
Возраст: 28
|
Имеем 2 массива Первый Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} } И второй Код --lua local arr = {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} Нужно сравнить каждый массив из двумерного с обычным, и если будет совпадение, присвоить переменной Код порядковый номер совпавшего массива (он находится внутри двумерного). Не получается. Пишу Код --lua local х = 0 for j=1, #stati do for i=1, #stati[j] do if stati[j][i] == arr[i] then local x = x + 1 end local numst = (j) if x == #stati[j] then if numst == 1 then log "Совпал 1й массив" else if numst == 2 then log "Совпал 2й массив" else if numst == 3 then log "Совпал 3й массив" end end end else log ("Пусто") х = 0 end end end Получаю ошибку Код a runtime error. 893: attempt to perform arithmetic on global 'x' (a nil value) --lua log 'clear' log 'mode compact' local result = 0 local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, Подозреваю что ошибка в моменте когда j записываю в переменную но как исправить не знаю. Помогите разобраться пожалуйста.
|
|
|
|
cirus |
22.10.2021, 1:55
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26707
Пользователь №: 16.971
Возраст: 29
|
Цитата attempt to perform arithmetic on global 'x' (a nil value) Эта ошибка означает что переменной x не существует. Не нужно путать русскую 'х' и англ. 'x'. Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} }
local arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 end if x == #stati[j] then log ("Совпал " .. tostring(j) .. "й массив") end end end
|
|
|
|
handness |
22.10.2021, 2:18
|
Neophyte
Сообщений: 27
Регистрация: 25.7.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.026
Возраст: 28
|
Цитата(cirus @ 22.10.2021, 1:55) Эта ошибка означает что переменной x не существует. Не нужно путать русскую 'х' и англ. 'x'. Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} }
local arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 end if x == #stati[j] then log ("Совпал " .. tostring(j) .. "й массив") end end end А ларчик просто открывался. Коварная ошибка. Спасибо. Но тем не менее, это Код if x == #stati[j] then log ("Совпал " .. tostring(j) .. "й массив") end не совсем то, что нужно. В зависимости от того какой массив совпадет, будут предприняты разные действия. Как можно написать "если совпал 1й, если совпал 2й, если совпал 3й"...? Встроить условие в проверку
|
|
|
|
cirus |
22.10.2021, 2:24
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26707
Пользователь №: 16.971
Возраст: 29
|
Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} }
local arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 else break end end if x == #stati[j] then if j == 1 then log ("Совпал 1") elseif j == 2 then log ("Совпал 2") elseif j == 3 then log ("Совпал 3") end end end
|
|
|
|
handness |
22.10.2021, 6:49
|
Neophyte
Сообщений: 27
Регистрация: 25.7.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.026
Возраст: 28
|
Цитата(cirus @ 22.10.2021, 2:24) Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} }
local arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 else break end end if x == #stati[j] then if j == 1 then log ("Совпал 1") elseif j == 2 then log ("Совпал 2") elseif j == 3 then log ("Совпал 3") end end end Спасибо
|
|
|
|
cirus |
22.10.2021, 12:48
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26707
Пользователь №: 16.971
Возраст: 29
|
Код --lua local stati = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}, {11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151} }
local arr = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150}
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 if #arr == #stati[j] then -- если размер массивов совпадает for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 else break end end if x == #stati[j] then if j == 1 then log ("Совпал 1") elseif j == 2 then log ("Совпал 2") elseif j == 3 then log ("Совпал 3") end end end end
|
|
|
|
handness |
22.10.2021, 20:07
|
Neophyte
Сообщений: 27
Регистрация: 25.7.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.026
Возраст: 28
|
Цитата(cirus @ 22.10.2021, 12:48) Код --lua
log 'clear' log 'mode compact' for j=1, #stati do local x = 0 if #arr == #stati[j] then -- если размер массивов совпадает for i=1, #stati[j] do if stati[j][i] == arr[i] then x = x + 1 else break end end
И тут так просто не вышло. Видимо, не надо было упрощать пример для форума. Проблема в том, что этот кусочек кода сравнивает длину строк, а у меня данные находятся не в строчке arr, а в третьем столбце и имеют вид arr[i][3]. Можно ли таким же образом как-то сравнить длину массива (строчки) #stati[j] с "высотой" столбца arr[i][3]? Может можно перед сравнением создать дополнительный как бы переходный массив и переписать в него данные "в строчку" из третьего столбца (arr[i][3])? UPD: решено записью столбика в строчкуКод local sravnenie = {}
for k=1, #stat1 do table.insert(sravnenie, stat1[k][3]) end
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|