Q Dili - Sözlükler

Sözlükler, tablo oluşturmak için temel sağlayan listelerin bir uzantısıdır. Matematiksel terimlerle sözlük,

"Alan → Aralık"

veya genel olarak (kısa) oluşturur

"Anahtar → değer"

elemanlar arasındaki ilişki.

Sözlük, kabaca bir karma tabloya eşdeğer olan anahtar-değer çiftlerinin sıralı bir koleksiyonudur. Sözlük, bir alan listesi ile bir aralık listesi arasında konumsal yazışma yoluyla açık bir I / O ilişkisi tarafından tanımlanan bir eşlemedir. Bir sözlüğün oluşturulması, "xkey" ilkel (!)

ListOfDomain ! ListOfRange

En temel sözlük, basit bir listeyi basit bir listeyle eşler.

Giriş (I) Çıkış (O)
İsim John
`Yaş 36
Seks "M"
Ağırlık 60.3
q)d:`Name`Age`Sex`Weight!(`John;36;"M";60.3)   / Create a dictionary d

q)d

Name   | `John
Age    | 36
Sex    | "M"
Weight | 60.3

q)count d             / To get the number of rows in a dictionary.
4

q)key d               / The function key returns the domain
`Name`Age`Sex`Weight

q)value d             / The function value returns the range.

`John
36

"M"
60.3

q)cols d             / The function cols also returns the domain.
`Name`Age`Sex`Weight

Yukarı Bak

Bir giriş değerine karşılık gelen sözlük çıktı değerinin bulunması denir looking up girdi.

q)d[`Name]       / Accessing the value of domain `Name
`John

q)d[`Name`Sex]   / extended item-wise to a simple list of keys
`John
"M"

Verb @ ile arama

q)d1:`one`two`three!9 18 27

q)d1[`two]
18

q)d1@`two
18

Sözlüklerde İşlemler

Düzeltme ve Yükseltme

Listelerde olduğu gibi, bir sözlüğün öğeleri de dizinlenmiş atama yoluyla değiştirilebilir.

d:`Name`Age`Sex`Weight! (`John;36;"M";60.3)
                                  / A dictionary d
                                  
q)d[`Age]:35                      / Assigning new value to key Age

q)d 
                              / New value assigned to key Age in d
Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3

Sözlükler, dizin atama yoluyla genişletilebilir.

q)d[`Height]:"182 Ft"

q)d

Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3
Height | "182 Ft"

Bul (?) İle Geriye Doğru Arama

Bul (?) Operatörü, bir dizi öğeyi etki alanı öğesine eşleyerek geriye doğru arama yapmak için kullanılır.

q)d2:`x`y`z!99 88 77

q)d2?77
`z

Bir listenin öğelerinin benzersiz olmaması durumunda, find alan listesinden ilk öğe eşlemesini ona döndürür.

Girişleri Kaldırma

Bir girişi sözlükten kaldırmak için, delete ( _ ) functionkullanıldı. Sol işlenen (_) sözlüktür ve sağ işlenen bir anahtar değeridir.

q)d2:`x`y`z!99 88 77

q)d2 _`z

x| 99
y| 88

İlk işlenen bir değişkense, _ karakterinin solunda boşluk olması gerekir.

q)`x`y _ d2           / Deleting multiple entries

z| 77

Sütun Sözlükleri

Sütun sözlükleri, tablo oluşturmanın temelidir. Aşağıdaki örneği düşünün -

q)scores: `name`id!(`John`Jenny`Jonathan;9 18 27)
                              / Dictionary scores
                              
q)scores[`name]               / The values for the name column are
`John`Jenny`Jonathan

q)scores.name                 / Retrieving the values for a column in a
                              / column dictionary using dot notation.
`John`Jenny`Jonathan

q)scores[`name][1]            / Values in row 1 of the name column
`Jenny

q)scores[`id][2]              / Values in row 2 of the id column is
27

Sözlüğü Çevirmek

Bir sütun sözlüğünü çevirmenin net etkisi, indislerin sırasını tersine çevirmektir. Bu mantıksal olarak satırların ve sütunların yer değiştirmesine eşdeğerdir.

Sütun Sözlüğünde Çevirme

Bir sözlüğün devri, tekli çevirme operatörü uygulanarak elde edilir. Aşağıdaki örneğe bir göz atın -

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

  name     id
---------------
  John     9
  Jenny    18
 Jonathan  27

Ters Sütun Sözlüğünün Çevirilmesi

Bir sözlüğü iki kez transpoze ederseniz, orijinal sözlüğü elde edersiniz,

q)scores ~ flip flip scores
1b