Что нового

Есть ли возможность обращаться к колонкам массива по имени?

ildary

Новичок
Сообщения
49
Репутация
0
Уважаемые специалисты, скажите пожалуйста, существует ли в autoit возможность обращаться к 2d массиву с помощью номера строки и имени колонки? Например создавать колонку не с номером 3, а с именем "Date", "Sum" или "StudentName" и получать данные из ячейки как Arr[3]["Date"]?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ildary [?]
существует ли в autoit возможность обращаться к 2d массиву с помощью номера строки и имени колонки?
Да, через объект Scripting.Dictionary, но, ИМХО, удобнее по номерам.
 
Автор
I

ildary

Новичок
Сообщения
49
Репутация
0
Спасибо за ответ, а более нативных вариантов не предвидится?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Обращаться к элементам массива по номерам - это и есть нативный вариант. imho
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В последних бетах, начиная с 3.3.13.6 разработчики добавили новый тип данных - MAP. Это ассоциативный массив, таблица, словарь.. все в одном.
В нем можно обращатся к элементам по имени. Синтаксис такой же как у массива. Создается так:
Код:
Local $aaa[]

а элементы добавляются так же как и в массив:
Код:
$aaa['hello'] = 'user'

так можно получить значение.
Код:
ConsoleWrite($aaa['hello'] & @CRLF)

К этому типу данных прилагаются функции: MapAppend(), MapRemove(), MapExists(), MapKeys(), IsMap()
 
Автор
I

ildary

Новичок
Сообщения
49
Репутация
0
C2H5OH сказал(а):
Обращаться к элементам массива по номерам - это и есть нативный вариант. imho

Да, это так, если рассматривать массив как объект ЯВУ аля C, Pascal и т.п. А если смотреть на двумерный массив как объект работы с данными, аля СУБД - тогда именованные колонки - это проще и читабельнее.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
$myname = 0
$etcname = 1
$superbase = 2

$aArray[$etcname]

:D :smile:
 
Автор
I

ildary

Новичок
Сообщения
49
Репутация
0
Неподходящий вариант, хочется что-то такого:

Код:
Func GetNumber( $Array, $RowNumber, $ColName )

    Return $Array[ $RowNumber ][ $ColName ]

EndFunc ;GetNumber
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ildary [?]
Неподходящий вариант, хочется что-то такого:

Код:
#include<Array.au3>

Local $aTest[4] = ['banana=>1', 'berry=>3', 'apple=>5', 'apple=>two']

ConsoleWrite(StringFormat('In the basket %s: %s\r', 'banana', _AssocArray($aTest, 'banana')))
ConsoleWrite(StringFormat('In the basket %s: %s\r', 'berry', _AssocArray($aTest, 'berry')))
ConsoleWrite(StringFormat('In the basket %s: %s\r', 'apple', _AssocArray($aTest, 'apple')))

Func _AssocArray(ByRef $a_Array, $i_Key)

    $o_Obj = ObjCreate("Scripting.Dictionary")
    If @error Then SetError(1, 0, 0)
	
	For $i = 0 To UBound($a_Array)-1
		
		$a_Tmp = StringSplit($a_Array[$i], '=>', 1)

		If Not $o_Obj.Exists($a_Tmp[1]) Then
			$o_Obj.Add($a_Tmp[1], $a_Tmp[2])
		Else
			$o_Obj.Item($a_Tmp[1]) = $a_Tmp[2]
		EndIf
	Next

    $v_Result = $o_Obj.Item($i_Key)
    $i_UBound = $o_Obj.Count
    $o_Obj = 0

    Return SetError(0, $i_UBound, $v_Result)
EndFunc; ==>_AssocArray
 
Верх