将不同类型的值更新到字典
upserting values of different types to a dictionary
这个有效:
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
有解决办法吗?为了更好的可读性,我想逐个键(逐行)填充字典。实际上,它更长。
当您将字典定义为 d:()!()
时,您插入的第一个内容(在本例中为日期)将使字典的类型仅采用 -14h
.[=13 类型的值=]
标准做法是用未类型化的值初始化 dict,以阻止该值变成简单的向量
q)d2:enlist[`]!enlist(::)
q)d2[`t1]:2017.01.01
q)d2[`t2]:2018.01.01
q)d2[`idx]:42
q)d2
| ::
t1 | 2017.01.01
t2 | 2018.01.01
idx| 42
第一种方法定义了一个通用字典,其值是一个通用列表,这意味着它可以存储任何类型的值。这也用于定义表,因为表可以存储不同类型的列。
在第二种方法中,当您在字典中插入第一个值时,它会将字典的值列表类型设置为该元素类型。所以它现在是一个简单的列表。
q) d2: ()!()
q) d2[`t1]:2017.01.01
q) type value d2 / 14h
这意味着现在字典值不能是一个通用列表,只能在其中存储日期类型的项目。
要创建通用字典(将通用列表存储为值),请将第一个条目值插入为空 (::)。这是命名空间字典使用的内容。
q) d2: ()!()
q) d2[`]:(::)
现在它可以存储任何值。
q) d2[`t2]:2018.01.01
q) d2[`idx]:42
或者,您可以连接 2 个词典而不是添加条目。当您需要向现有词典中添加内容时,这会派上用场。不完全是 OPs 场景,但它符合标题,因此登陆此处的其他人可能会发现它有用。
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
这个有效:
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
有解决办法吗?为了更好的可读性,我想逐个键(逐行)填充字典。实际上,它更长。
当您将字典定义为 d:()!()
时,您插入的第一个内容(在本例中为日期)将使字典的类型仅采用 -14h
.[=13 类型的值=]
标准做法是用未类型化的值初始化 dict,以阻止该值变成简单的向量
q)d2:enlist[`]!enlist(::)
q)d2[`t1]:2017.01.01
q)d2[`t2]:2018.01.01
q)d2[`idx]:42
q)d2
| ::
t1 | 2017.01.01
t2 | 2018.01.01
idx| 42
第一种方法定义了一个通用字典,其值是一个通用列表,这意味着它可以存储任何类型的值。这也用于定义表,因为表可以存储不同类型的列。
在第二种方法中,当您在字典中插入第一个值时,它会将字典的值列表类型设置为该元素类型。所以它现在是一个简单的列表。
q) d2: ()!()
q) d2[`t1]:2017.01.01
q) type value d2 / 14h
这意味着现在字典值不能是一个通用列表,只能在其中存储日期类型的项目。
要创建通用字典(将通用列表存储为值),请将第一个条目值插入为空 (::)。这是命名空间字典使用的内容。
q) d2: ()!()
q) d2[`]:(::)
现在它可以存储任何值。
q) d2[`t2]:2018.01.01
q) d2[`idx]:42
或者,您可以连接 2 个词典而不是添加条目。当您需要向现有词典中添加内容时,这会派上用场。不完全是 OPs 场景,但它符合标题,因此登陆此处的其他人可能会发现它有用。
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