Список упорядочен слева направо по позиции его элементов. Смещение элемента от начала списка называется его индексом . Таким образом, первый элемент имеет индекс 0, второй элемент (если таковой имеется) имеет индекс 1 и т. Д. Список с номером n имеет индексную область от 0 до n – 1 .
Индексная нотация
Имея список L , элемент с индексом i доступен через L [i] . Получение элемента по его индексу называется индексацией элемента . Например,
q)L:(99;98.7e;`b;`abc;"z") q)L[0] 99 q)L[1] 98.7e q)L[4] "z
Индексированное назначение
Элементы в списке также могут быть назначены с помощью индексации элементов. Таким образом,
q)L1:9 8 7
q)L1[2]:66 / Indexed assignment into a simple list
/ enforces strict type matching.
q)L1
9 8 66
Списки из переменных
q)l1:(9;8;40;200) q)l2:(1 4 3; `abc`xyz) q)l:(l1;l2) / combining the two list l1 and l2 q)l 9 8 40 200 (1 4 3;`abc`xyz)
Присоединяющиеся списки
Самая распространенная операция в двух списках — это объединение их в большой список. Точнее, оператор соединения (,) добавляет свой правый операнд в конец левого операнда и возвращает результат. Он принимает атом в любом аргументе.
q)1,2 3 4
1 2 3 4
q)1 2 3, 4.4 5.6 / If the arguments are not of uniform type,
/ the result is a general list.
1
2
3
4.4
5.6
гнездование
Сложность данных строится с использованием списков в качестве элементов списков.
глубина
Количество уровней вложенности для списка называется его глубиной. Атомы имеют глубину 0, а простые списки имеют глубину 1.
q)l1:(9;8;(99;88)) q)count l1 3
Вот список глубины 3 с двумя пунктами:
q)l5 9 (90;180;900 1800 2700 3600) q)count l5 2 q)count l5[1] 3
Индексирование по глубине
Можно индексировать непосредственно в элементы вложенного списка.
Повторное индексирование предметов
Извлечение элемента по одному индексу всегда приводит к получению самого верхнего элемента из вложенного списка.
q)L:(1;(100;200;(300;400;500;600))) q)L[0] 1 q)L[1] 100 200 300 400 500 600
Поскольку результат L [1] сам по себе является списком, мы можем извлечь его элементы, используя один индекс.
q)L[1][2] 300 400 500 600
Мы можем повторить одиночную индексацию еще раз, чтобы извлечь элемент из внутреннего вложенного списка.
q)L[1][2][0] 300
Вы можете прочитать это как,
Получить элемент по индексу 1 из L и извлечь из него элемент по индексу 2, а из него получить элемент по индексу 0.
Обозначение для индексации на глубине
Существует альтернативное обозначение для повторной индексации в составные части вложенного списка. Последний поиск также может быть записан как,
q)L[1;2;0] 300
Назначение через индекс также работает на глубине.
q)L[1;2;1]:900 q)L 1 (100;200;300 900 500 600)
Элидируемые индексы
Исключение индексов для общего списка
q)L:((1 2 3; 4 5 6 7); (`a`b`c;`d`e`f`g;`0`1`2);("good";"morning"))
q)L
(1 2 3;4 5 6 7)
(`a`b`c;`d`e`f`g;`0`1`2)
("good";"morning")
q)L[;1;]
4 5 6 7
`d`e`f`g
"morning"
q)L[;;2]
3 6
`c`f`2
"or"
Интерпретировать L [; 1;] как,
Получить все элементы во второй позиции каждого списка на верхнем уровне.
Интерпретировать L [;; 2] как,
Получить элементы в третьей позиции для каждого списка на втором уровне.