返回介绍

Q语言 - 词典(Dictionaries)

发布于 2021-05-31 13:43:27 字数 3440 浏览 902 评论 0 收藏 0

字典是列表的扩展,为创建表提供了基础。 在数学术语中,字典创建了

“域→范围”

或者一般(简称)创造

“关键→价值”

元素之间的关系。

字典是键值对的有序集合,大致相当于哈希表。 字典是由域列表和范围列表之间通过位置对应关系定义的显式I/O关联定义的映射。 字典的创建使用“xkey”原语(!)

                  ListOfDomain ! ListOfRange

最基本的字典将简单列表映射到简单列表。

输入(I)输出(O)
`Name`John
`Age36
`Sex“M”
Weight60.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

Lookup

查找对应于输入值的字典输出值被称为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

字典操作

修改和Upsert

与列表一样,可以通过索引分配修改字典的项目。

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"

使用Find(?)反向查找

find(?)运算符用于通过将一系列元素映射到其domain元素来执行反向查找。

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

如果列表的元素不是唯一的,则find返回从域列表映射到它的第一个项目。

删除条目

要从字典中delete ( _ ) function条目,请使用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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文