Ngôn ngữ Q - Lập chỉ mục

Một danh sách được sắp xếp từ trái sang phải theo vị trí của các mục trong đó. Phần bù của một mục từ đầu danh sách được gọi làindex. Như vậy, mục đầu tiên có chỉ số 0, mục thứ hai (nếu có) có chỉ số 1, v.v. Một danh sách đếmn có miền chỉ mục từ 0 đến n–1.

Bảng chỉ mục

Đưa ra một danh sách L, mục ở chỉ mục i được truy cập bởi L[i]. Lấy một mục theo chỉ mục của nó được gọi làitem indexing. Ví dụ,

q)L:(99;98.7e;`b;`abc;"z")

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Bài tập được lập chỉ mục

Các mục trong danh sách cũng có thể được chỉ định thông qua lập chỉ mục mục. Vì vậy,

q)L1:9 8 7

q)L1[2]:66      / Indexed assignment into a simple list
                / enforces strict type matching.
                
q)L1
9 8 66

Danh sách từ các biến

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)

Tham gia danh sách

Thao tác phổ biến nhất trên hai danh sách là nối chúng lại với nhau để tạo thành một danh sách lớn hơn. Chính xác hơn, toán tử nối (,) nối toán hạng bên phải của nó vào cuối toán hạng bên trái và trả về kết quả. Nó chấp nhận một nguyên tử trong một trong hai đối số.

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

Làm tổ

Độ phức tạp của dữ liệu được xây dựng bằng cách sử dụng danh sách dưới dạng các mục của danh sách.

Chiều sâu

Số lượng cấp độ lồng cho một danh sách được gọi là độ sâu của nó. Nguyên tử có độ sâu bằng 0 và danh sách đơn giản có độ sâu bằng 1.

q)l1:(9;8;(99;88))

q)count l1
3

Đây là danh sách độ sâu 3 có hai mục:

q)l5
9
(90;180;900 1800 2700 3600)

q)count l5
2

q)count l5[1]
3

Lập chỉ mục ở độ sâu

Có thể lập chỉ mục trực tiếp vào các mục của danh sách lồng nhau.

Repeated Item Indexing

Truy xuất một mục qua một chỉ mục duy nhất luôn truy xuất một mục trên cùng từ danh sách lồng nhau.

q)L:(1;(100;200;(300;400;500;600)))

q)L[0]
1

q)L[1]
100
200
300 400 500 600

Kể từ kết quả L[1] bản thân nó là một danh sách, chúng ta có thể truy xuất các phần tử của nó bằng cách sử dụng một chỉ mục duy nhất.

q)L[1][2]
300 400 500 600

Chúng ta có thể lặp lại lập chỉ mục đơn một lần nữa để truy xuất một mục từ danh sách lồng nhau trong cùng.

q)L[1][2][0]
300

Bạn có thể đọc cái này là,

Lấy mục ở chỉ mục 1 từ L, và từ nó lấy mục ở chỉ mục 2 và từ nó lấy mục ở chỉ mục 0.

Notation for Indexing at Depth

Có một ký hiệu thay thế để lập chỉ mục lặp lại vào các thành phần của danh sách lồng nhau. Lần truy xuất cuối cùng cũng có thể được viết là,

q)L[1;2;0]
300

Việc chỉ định thông qua chỉ mục cũng hoạt động theo chiều sâu.

q)L[1;2;1]:900

q)L
1
(100;200;300 900 500 600)

Các chỉ số Elided

Eliding Indices for a General List

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"

Interpret L[;1;] as,

Truy xuất tất cả các mục ở vị trí thứ hai của mỗi danh sách ở cấp cao nhất.

Interpret L[;;2] as,

Truy xuất các mục ở vị trí thứ ba cho mỗi danh sách ở cấp độ thứ hai.