1 (изменено: KepocuH, 2020-07-28 19:27:08)

Тема: AHK: Копирование строк в двумерном массиве

Добрый день!
Имеется двумерный массив table1[x, y]
Нужно скопировать их него в массив table2 некоторые строки по определенному условию.
Допустим, если table1[x, 1] = 1, то строка table1[x] вставляется в конец массива table2.
Таблица1:
1 а б в г д
0 е ж з и к
0 л м н о п
1 р с т у ф
0 х ц ч ш щ
1 ъ ь э ю я
Должна получиться таблица2:
1 а б в г д
1 р с т у ф
1 ъ ь э ю я
Делаю так:


i := 1
loop %x% {
	if (table1[A_Index, 1] = 1) {
		a := A_Index
		loop %y% {
			table2[i, A_Index] := table1[a, A_Index]
		}
		i += 1
	}
}

Есть ли способ попроще?
Что-то вроде такого:


loop %x% {
	if (table1[A_Index, 1] = 1) 
		table2.Push(table1[A_Index])
}

UPD:
Пока ковырялся, столкнулся еще с парой проблем.
Создал табличку в excel (см. приложенный файл).
Считываю Range из экселя в массив arr1.


OnExit("ExitFunc")

ExitFunc(ExitReason, ExitCode) {
	global Xl
	Xl.quit
}

FileSelectFile, inputFile
if Errorlevel
	return

Xl := ComObjCreate("Excel.Application")
Xl.Visible := True
ot := Xl.Workbooks.Open(inputFile)

; Определяем длину таблицы
Loop {
	a := ot.Worksheets(1).Cells(A_Index, 1).value
	if (a = "")
		break
	x := a_index
}
MsgBox % x ; показывает количество строк в экселевском файле (4)
; Создаем массив из таблицы
dataArea := ot.Worksheets(1).Range("A1:E" x)
arr1 := dataArea.value

; создаем массив вручную
;arr1 := [[0, 2, 3, 4, 5], [1, 5, 4, 3, 2], [0, 6, 7, 8, 9], [1, 9, 8, 7, 6]]

arr2[1] := arr1[1] ; присваиваем первой строке массива arr2 первую строку массива arr1
if (arr2[1] = arr1[1]) ; сравниваем строки
	MsgBox Строки идентичны ; msgbox отображается, если arr1 создан из экселя, и НЕ отображается, если создан вручную (О_о)
MsgBox % """" arr1[1,1] """ = """ arr2[1,1] """" ; показывает "0" = "" в обоих случаях
MsgBox % """" arr1.MaxIndex() """ = """ arr2.MaxIndex() """" ; показывает "4" = "" в обоих случаях
ExitApp

Почему arr1[1,1] отображается, а arr2[1,1] нет?
Чем отличаются друг от друга  массивы arr1 в случае создания из excel и вручную?

Что ж все так сложно-то, а?

Post's attachments

123.xlsx 7.66 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2 (изменено: Phoenixxx_Czar, 2020-07-30 02:31:33)

Re: AHK: Копирование строк в двумерном массиве

arr1 := [[0, 2, 3, 4, 5], [1, 5, 4, 3, 2], [0, 6, 7, 8, 9], [1, 9, 8, 7, 6]]
arr2 := []

for k, v in arr1
{
	if (v[1] == 1)
	{
		arr2.Push(v)
	}
}
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)