将不同类型的值上载到字典

时间:2019-01-16 17:18:08

标签: kdb

该作品:

d1:`t1`t2`idx!(2017.01.01;2018.01.01;42)

但是这个失败了(类型错误):

d2:()!()
d2[`t1]:2017.01.01
d2[`t2]:2018.01.01
d2[`idx]:42

有解决方法吗?为了更好的可读性,我想逐行填充字典中的键(逐行)。实际上,它更长。

3 个答案:

答案 0 :(得分:4)

当您将字典定义为d:()!()时,您插入的第一件事(在这种情况下为日期)将使字典的类型仅采用-14h类型的值。标准做法是使用无类型的值初始化字典,以使该值不再成为简单的向量

d2:enlist[`]!enlist(::)
d2[`t1]:2017.01.01
d2[`t2]:2018.01.01
d2[`idx]:42
d2
   | ::
t1 | 2017.01.01
t2 | 2018.01.01
idx| 42

答案 1 :(得分:2)

第一种方法定义了一个通用字典,其值是一个通用列表,这意味着它可以存储任何类型的值。这也用于定义表,因为表可以存储不同类型的列。

在第二种方法中,当您在字典中插入第一个值时,它将字典的值列表的类型设置为该元素类型。所以这是一个简单的清单。

  q) d2: ()!()
  q) d2[`t1]:2017.01.01
  q) type value d2  / 14h

这意味着现在词典值不能成为常规列表,并且只能在其中存储日期类型的项目。

要创建常规词典(将常规列表存储为值),请将第一个条目值插入为null(::)。这就是名称空间词典所使用的。

  q)  d2: ()!()
  q)  d2[`]:(::) 

现在它可以存储任何值。

  q) d2[`t2]:2018.01.01
  q) d2[`idx]:42

答案 2 :(得分:1)

或者,您可以连接2个词典,而不必添加条目。当您需要向现有字典中添加某些内容时,这非常方便。不完全是OP场景,但它适合标题,因此在此登陆的其他人可能会觉得有用。

d2:()!()
d2[`t1]:2017.01.01
d2[`t2]:2018.01.01
d2:d2,(enlist `idx)!(enlist 42)
d2

t1 | 2017.01.01
t2 | 2018.01.01
idx| 42