2014-02-04 2 views
0

В настоящее время у меня возникла странная проблема, для которой я не могу найти причину. Я пытаюсь создать многомерный массив в AutoIt и инициализировать его значениями. Сохраняя вариант типа данных в виде, это должно быть возможно создать массив, которыйМожет ли инициализатор массива AutoIt обрабатывать разные типы данных?

  • состоит из нескольких элементов (конечно)
  • каждого элемента другой массив, содержащий ровно два элемента (с разными типами)
  • эти два элемента представляют собой единое целое, а другой массив с 4 целых

Поэтому в основном я хочу иметь массив пар ключ/значение, где значение является массивом чисел. Я знаю, что «значение» в этом случае рассматривается как простая переменная, а не как непосредственно доступный массив - вот чего я хочу.

Однако, если я пытаюсь

Global Const $x[3][2] = [ _ 
          [1, [11,12,13,14] ], _ 
          [2, [21,22,23,24] ], _ 
          [3, [31,32,33,34] ] _ 
         ] 

Я просто

error: syntax error 
        [1, [ 
        ~~~~^ 
error: syntax error 
        [2, [ 
        ~~~~^ 
error: syntax error 
        [3, [ 
        ~~~~^ 

Либо я что-то отсутствует или инициализатор не понимает, что я не хочу иметь 3 размеры, но всего 2 и обрабатывать 4 массива элементов как один вариант.

Может ли кто-нибудь предложить предпочтительное решение для этого? Или я должен забыть это комбинированное решение и просто идти с массивом массивов с 5 элементами каждый, как

Global Const $x[3][5] = [ _ 
          [1, 11,12,13,14 ], _ 
          [2, 21,22,23,24 ], _ 
          [3, 31,32,33,34 ] _ 
         ] 

и обрабатывать разницу в коде?

ответ

1

Возможно, но вам необходимо инициализировать внутренние массивы отдельно.

Global $arr[3][2] 
Global $a1[4] = [11,12,13,14] ;these are the inner arrays 
Global $a2[4] = [21,22,23,24] 
Global $a3[4] = [31,32,33,34] 
$arr[0][0] = 1 
$arr[0][1] = $a1 ;put the inner arrays into the outer array 
$arr[1][0] = 2 
$arr[1][1] = $a2 
$arr[2][0] = 3 
$arr[2][1] = $a3 

Global $arrTemp 
For $i = 0 to UBound($arr)-1 
    $arrTemp = $arr[$i][1] 
    For $j = 0 To UBound($arrTemp)-1 
     ConsoleWrite($arr[$i][0] & ': ' & $arrTemp[$j] & @CRLF) 
    Next 
Next 

Этот выход будет:

1: 11 
1: 12 
1: 13 
1: 14 
2: 21 
2: 22 
2: 23 
2: 24 
3: 31 
3: 32 
3: 33 
3: 34 
+0

Это не помогает мне, поскольку у меня уже есть 2 массива, инициализированных отдельно, но, скорее, требуется комбинированное решение. Тем не менее, он отвечает на вопрос - так что я пойду на 5 пунктов подхода ... – Fabian

1

Не думаю, что это возможно. Вы можете получить для этого:

#region ;************ Includes ************ 
#include <Array.au3> 
#endregion ;************ Includes ************ 

Global $a[4] = [11, 12, 13, 14] 
Global Const $x[3][2] = [ _ 
     [1, $a], _ 
     [2, "21,22,23,24"], _ 
     [3, "31,32,33,34"] _ 
     ] 

_ArrayDisplay($x) 

; Getting the values of [0][1] 
For $i = 0 To UBound($a) - 1 
    ConsoleWrite($a[$i] & @CR) 
Next 

$re = StringSplit($x[1][1], ',', 2) 
For $i = 0 To UBound($re) - 1 
    ConsoleWrite($re[$i] & @CR) 
Next 
+0

Это мне не помогает, так как у меня уже есть 2 массивы инициализируются по отдельности, а хотите комбинированное решение. Тем не менее, он отвечает на вопрос - так что я подойду для подхода с 5 пунктами ... – Fabian

Смежные вопросы