Список упорядочен слева направо по позиции его элементов. Смещение элемента от начала списка называется его индексом . Таким образом, первый элемент имеет индекс 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] как,
Получить элементы в третьей позиции для каждого списка на втором уровне.