Q Dili - Endeksleme

Bir liste, öğelerinin konumuna göre soldan sağa sıralanır. Bir öğenin listenin başından olan uzaklığına onunindex. Bu nedenle, ilk öğenin indeksi 0, ikinci öğenin (eğer varsa) indeksi 1, vb.n dizin etki alanına sahip 0 -e n–1.

Dizin gösterimi

Bir liste verildi L, dizindeki öğe i tarafından erişilir L[i]. Bir öğeyi indeksine göre geri çağırmak deniritem indexing. Örneğin,

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

q)L[0]
99

q)L[1]
98.7e

q)L[4]
"z

Dizine Alınmış Atama

Bir listedeki öğeler, öğe indeksleme yoluyla da atanabilir. Böylece,

q)L1:9 8 7

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

Değişkenlerden Listeler

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)

Listelere Katılma

İki listedeki en yaygın işlem, daha büyük bir liste oluşturmak için bunları bir araya getirmektir. Daha doğrusu, birleştirme operatörü (,) sağ işlenenini sol işlenenin sonuna ekler ve sonucu döndürür. Her iki argümanda da bir atomu kabul eder.

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

Yuvalama

Veri karmaşıklığı, listeleri liste öğeleri olarak kullanarak oluşturulur.

Derinlik

Bir liste için iç içe geçme düzeylerinin sayısına derinlik denir. Atomların derinliği 0 ve basit listelerin derinliği 1'dir.

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

q)count l1
3

İşte iki öğeye sahip derinlik 3'ün bir listesi -

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

q)count l5
2

q)count l5[1]
3

Derinlikte Endeksleme

İç içe geçmiş bir listenin öğelerini doğrudan indekslemek mümkündür.

Repeated Item Indexing

Bir öğeyi tek bir dizin yoluyla almak, her zaman iç içe geçmiş bir listeden en üstteki öğeyi alır.

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

q)L[0]
1

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

Sonuçtan beri L[1] kendisi bir listedir, elemanlarını tek bir indeks kullanarak alabiliriz.

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

En içteki iç içe listeden bir öğeyi almak için tek indekslemeyi bir kez daha tekrarlayabiliriz.

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

Bunu şu şekilde okuyabilirsiniz:

1. dizindeki öğeyi L'den alın ve ondan 2. dizindeki öğeyi alın ve ondan 0. dizindeki öğeyi alın.

Notation for Indexing at Depth

İç içe geçmiş bir listenin bileşenlerine tekrarlanan indeksleme için alternatif bir gösterim vardır. Son geri çağırma şu şekilde de yazılabilir:

q)L[1;2;0]
300

İndeks yoluyla atama da derinlemesine çalışır.

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

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

Elided Endeksler

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,

En üst düzeydeki her listenin ikinci konumundaki tüm öğeleri alın.

Interpret L[;;2] as,

İkinci seviyedeki her liste için üçüncü pozisyondaki öğeleri alın.