Język Q - słowniki
Słowniki są rozszerzeniem list, które stanowią podstawę tworzenia tabel. W terminologii matematycznej słownik tworzy rozszerzenie
„Domena → zakres”
lub ogólnie (krótko) tworzy
„Klucz → wartość”
związek między elementami.
Słownik jest uporządkowaną kolekcją par klucz-wartość, która jest z grubsza odpowiednikiem tablicy skrótów. Słownik to odwzorowanie zdefiniowane przez jawne powiązanie we / wy między listą domen a listą zakresów za pośrednictwem korespondencji pozycyjnej. Tworzenie słownika używa prymitywu „xkey” (!)
ListOfDomain ! ListOfRange
Najbardziej podstawowy słownik odwzorowuje prostą listę na prostą listę.
Wejście (I) | Wyjście (O) |
---|---|
Imię | John |
`Wiek | 36 |
`` Seks | „M” |
Waga | 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
Wyszukaj
Nazywa się wyszukiwanie słownika wartości wyjściowej odpowiadającej wartości wejściowej looking up wejście.
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"
Wyszukaj za pomocą Verb @
q)d1:`one`two`three!9 18 27
q)d1[`two]
18
q)d1@`two
18
Operacje na słownikach
Amend and Upsert
Podobnie jak w przypadku list, elementy słownika można modyfikować za pomocą przypisania indeksowanego.
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łowniki można rozszerzać poprzez przypisywanie indeksów.
q)d[`Height]:"182 Ft"
q)d
Name | `John
Age | 35
Sex | "M"
Weight | 60.3
Height | "182 Ft"
Wyszukiwanie wsteczne z funkcją Find (?)
Operator find (?) Służy do wyszukiwania wstecznego poprzez mapowanie zakresu elementów na jego element domeny.
q)d2:`x`y`z!99 88 77
q)d2?77
`z
W przypadku, gdy elementy listy nie są unikatowe, rozszerzenie find zwraca mapowanie pierwszego elementu z listy domen.
Usuwanie wpisów
Aby usunąć wpis ze słownika, rozszerzenie delete ( _ ) functionjest używany. Lewy operand (_) to słownik, a prawy operand to wartość klucza.
q)d2:`x`y`z!99 88 77
q)d2 _`z
x| 99
y| 88
Jeśli pierwszy operand jest zmienną, po lewej stronie _ jest wymagany odstęp.
q)`x`y _ d2 / Deleting multiple entries
z| 77
Słowniki kolumnowe
Podstawą tworzenia tabel są słowniki kolumnowe. Rozważmy następujący przykład -
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
Odwracanie słownika
Efektem netto odwrócenia słownika kolumn jest po prostu odwrócenie kolejności indeksów. Jest to logicznie równoważne transpozycji wierszy i kolumn.
Odwróć słownik kolumn
Transpozycja słownika jest uzyskiwana przez zastosowanie jednoargumentowego operatora odwracania. Spójrz na następujący przykład -
q)scores
name | John Jenny Jonathan
id | 9 18 27
q)flip scores
name id
---------------
John 9
Jenny 18
Jonathan 27
Odwrócenie słownika odwróconej kolumny
Jeśli transponujesz słownik dwukrotnie, otrzymasz oryginalny słownik,
q)scores ~ flip flip scores
1b