比较kdb中的一个字符串是否大于另一个字符串

时间:2019-07-24 06:51:22

标签: kdb

我想检查两个字符串中的哪个更大,我使用的是下面的逻辑,但是在某些情况下失败了

q){$[1b in x>=y;x;y]}["b";"b"]
"b"
q){$[1b in x>=y;x;y]}["c";"b"]
"c"
q){$[1b in x>=y;x;y]}["azz";"dff"] // Wrong output (Reason for failure - "azz">"dff" --> 011b)
"azz" / desired output dff

请提出另一种方法来获取所提供字符串中最大的字符串?

由于比较运算符仅在比较“ dff”中的“ d”和“ azz”中的“ a”后,才可以将输出显示为“ dff”,因此在“ azz”和“ dff”中逐字符进行比较。 a”小于“ d”。

2 个答案:

答案 0 :(得分:1)

您可以将字符串转换为符号,并使用<,>等。这些运算符对符号执行字典比较。 https://code.kx.com//q4m3/4_Operators/

q) `azz < `dff
1b

如果您坚持使用字符串,则可以利用iasc创建类似“等于或小于或等于”的函数:

q) not first iasc ("azz"; "dff")
1b

答案 1 :(得分:0)

在这种情况下,使用1b in等效于任何情况,因为"azz">"dff"等于011b。如果“ azz”中的2个字母大于“ dff”,则您的条件将为true。

最好将x和y强制转换为符号并进行比较,因为这将使用1布尔值求值:

(`$"azz")>=`$"dff" 0b

{$[(`$x)>=`$y;x;y]}["azz";"dff"] "dff"

或者,您可以对desc顺序进行排序并得出第一个结果:

{first desc(x;y)}["azz";"dff"] "dff"