提问人:Franz Wong 提问时间:8/6/2023 更新时间:8/12/2023 访问量:119
在 kdb+ q 中带有数字的 Concat 字符串
Concat string with number in kdb+ q
问:
我可以附加一个带有数字的字符串。
temp:30
text:"Current temperature is ",string temp
show text
type text
结果
"Current temperature is 30"
10h
但是,如果我再附加一个字符串,它就会变成一个列表。(为什么?
text:"Current temperature is ",string temp," degree celsius"
show text
type text
结果
C
u
r
r
e
n
t
t
e
m
p
e
r
a
t
u
r
e
i
s
..
0h
我可以使用空字符串作为分隔符,这是正常的做法吗?sv
text:"" sv ("Current temperature is ";string temp;" degree celsius")
答:
0赞
user1874594
8/6/2023
#1
comma operator
将 中的每个字符视为单独的项,并创建这些字符的 A。concatenated string
list
另一方面,当您使用空字符串作为分隔符时,它会将列表中的所有字符串联接到一个字符串中,这是连接所需的行为。sv
3赞
Maurice Lim
8/6/2023
#2
您应该将其更改为
text:"Current temperature is ",string [temp]," degree celsius"
您的字符串函数正在处理:temp,“degree celsius”,但您只需要 string[temp] 来连接它。
评论
0赞
Franz Wong
8/6/2023
谢谢。q 中有类似 printf 的东西吗?所以我可以改用 %d。
1赞
Maurice Lim
8/6/2023
然后,您必须将其转换为函数。-1 是将字符串打印到控制台的内部函数。像这样的东西:然后你可以使用f:{[temp] -1 text:"Current temperature is ",string[temp]," degree celsius"}
f temp
1赞
Alexander Unterrainer
8/7/2023
#3
补充一下 Maurice Lim 的答案,这是因为 q 计算表达式的方式。表达式从左到右计算(这意味着表达式从右到左计算)。
https://code.kx.com/q4m3/4_Operators/#412-left-of-right-evaluation
因此,串联运算符首先在
temp," degree celsius"
这变成了一个混合列表。混合列表的显示方式与您获得第一个结果的方式完全相同。
使用方括号可更改计算顺序(因为它将 temp 绑定到函数字符串),因此首先计算。然后,将两个字符串连接起来,返回一个简单的列表。string[temp]
上一个:每 6 个月列出一次
评论