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