Q Language - Từ điển

Từ điển là một phần mở rộng của danh sách cung cấp nền tảng cho việc tạo bảng. Theo thuật ngữ toán học, từ điển tạo ra

“Miền → Phạm vi”

hoặc nói chung (ngắn gọn) tạo

"Khóa → giá trị"

mối quan hệ giữa các yếu tố.

Từ điển là một tập hợp có thứ tự các cặp khóa-giá trị gần tương đương với một bảng băm. Từ điển là một ánh xạ được xác định bởi một liên kết I / O rõ ràng giữa danh sách miền và danh sách phạm vi thông qua tương ứng vị trí. Việc tạo từ điển sử dụng nguyên thủy "xkey" (!)

ListOfDomain ! ListOfRange

Từ điển cơ bản nhất ánh xạ một danh sách đơn giản sang một danh sách đơn giản.

Đầu vào (I) Đầu ra (O)
`Tên `John
`Tuổi 36
`Tình dục “M”
Cân nặng 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

Tra cứu

Tìm giá trị đầu ra từ điển tương ứng với giá trị đầu vào được gọi là looking up đầu vào.

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"

Tra cứu với Động từ @

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

q)d1[`two]
18

q)d1@`two
18

Thao tác trên Từ điển

Sửa đổi và bổ sung

Cũng như danh sách, các mục của từ điển có thể được sửa đổi thông qua phân công được lập chỉ mục.

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

Từ điển có thể được mở rộng thông qua việc gán chỉ mục.

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

q)d

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

Tra cứu ngược với Tìm (?)

Toán tử find (?) Được sử dụng để thực hiện tra cứu ngược bằng cách ánh xạ một dải phần tử với phần tử miền của nó.

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

q)d2?77
`z

Trong trường hợp các phần tử của danh sách không phải là duy nhất, find trả về ánh xạ mục đầu tiên đến nó từ danh sách miền.

Xóa mục nhập

Để xóa một mục nhập khỏi từ điển, delete ( _ ) functionĐược sử dụng. Toán hạng bên trái của (_) là từ điển và toán hạng bên phải là một giá trị khóa.

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

q)d2 _`z

x| 99
y| 88

Cần phải có khoảng trắng ở bên trái của _ nếu toán hạng đầu tiên là một biến.

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

z| 77

Từ điển cột

Từ điển cột là những kiến ​​thức cơ bản để tạo bảng. Hãy xem xét ví dụ sau:

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

Lật từ điển

Hiệu quả thực của việc lật từ điển cột chỉ đơn giản là đảo ngược thứ tự của các chỉ số. Điều này về mặt logic tương đương với việc chuyển đổi các hàng và cột.

Lật từ điển cột

Việc chuyển từ điển có được bằng cách áp dụng toán tử lật một bậc. Hãy xem ví dụ sau:

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

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

Lật từ điển cột lật

Nếu bạn chuyển từ điển hai lần, bạn sẽ có được từ điển gốc,

q)scores ~ flip flip scores
1b