Q Language - พจนานุกรม

พจนานุกรมเป็นส่วนขยายของรายการที่เป็นรากฐานสำหรับการสร้างตาราง ในแง่คณิตศาสตร์พจนานุกรมจะสร้างไฟล์

“ โดเมน→ช่วง”

หรือโดยทั่วไป (สั้น) สร้าง

“ คีย์→ค่า”

ความสัมพันธ์ระหว่างองค์ประกอบ

พจนานุกรมคือชุดของคู่คีย์ - ค่าที่เรียงตามลำดับซึ่งเทียบเท่ากับตารางแฮช พจนานุกรมคือการแมปที่กำหนดโดยการเชื่อมโยง I / O อย่างชัดเจนระหว่างรายการโดเมนและรายการช่วงผ่านการโต้ตอบตำแหน่ง การสร้างพจนานุกรมใช้ "xkey" ดั้งเดิม (!)

ListOfDomain ! ListOfRange

พจนานุกรมขั้นพื้นฐานที่สุดจะจับคู่รายการง่ายๆกับรายการง่ายๆ

อินพุต (I) เอาท์พุท (O)
`ชื่อ `จอห์น
`อายุ 36
`เพศ “ M”
น้ำหนัก 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

ค้นหา

การค้นหาค่าเอาต์พุตพจนานุกรมที่สอดคล้องกับค่าอินพุตเรียกว่า looking up อินพุต

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 @

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

q)d1[`two]
18

q)d1@`two
18

การดำเนินการเกี่ยวกับพจนานุกรม

แก้ไขและอัปเดต

เช่นเดียวกับรายการรายการของพจนานุกรมสามารถแก้ไขได้ผ่านการกำหนดดัชนี

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

พจนานุกรมสามารถขยายได้ผ่านการกำหนดดัชนี

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

q)d

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

Reverse Lookup ด้วย Find (?)

ตัวดำเนินการ find (?) ใช้เพื่อทำการค้นหาแบบย้อนกลับโดยการแมปช่วงขององค์ประกอบกับองค์ประกอบโดเมน

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

q)d2?77
`z

ในกรณีที่องค์ประกอบของรายการไม่ซ้ำกันไฟล์ find ส่งคืนการแมปรายการแรกจากรายการโดเมน

การลบรายการ

ในการลบรายการออกจากพจนานุกรมไฟล์ delete ( _ ) functionถูกนำมาใช้. ตัวถูกดำเนินการด้านซ้ายของ (_) คือพจนานุกรมและตัวถูกดำเนินการด้านขวาคือค่าคีย์

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

q)d2 _`z

x| 99
y| 88

ต้องมีช่องว่างทางด้านซ้ายของ _ หากตัวถูกดำเนินการตัวแรกเป็นตัวแปร

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

z| 77

พจนานุกรมคอลัมน์

พจนานุกรมคอลัมน์เป็นพื้นฐานสำหรับการสร้างตาราง ลองพิจารณาตัวอย่างต่อไปนี้ -

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

พลิกพจนานุกรม

ผลสุทธิของการพลิกพจนานุกรมคอลัมน์เป็นเพียงการย้อนกลับลำดับของดัชนี สิ่งนี้เทียบเท่ากับการย้ายแถวและคอลัมน์ในเชิงตรรกะ

พลิกพจนานุกรมคอลัมน์

ทรานสโพสของพจนานุกรมได้มาจากการใช้ตัวดำเนินการพลิกยูนารี ดูตัวอย่างต่อไปนี้ -

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

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

พลิกพจนานุกรมคอลัมน์พลิก

หากคุณเปลี่ยนพจนานุกรมสองครั้งคุณจะได้รับพจนานุกรมต้นฉบับ

q)scores ~ flip flip scores
1b