我想检查两个字符串中的哪个更大,我使用的是下面的逻辑,但是在某些情况下失败了
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”。
答案 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"