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.