【问题标题】:Output difference when calling string()调用 string() 时的输出差异
【发布时间】:2013-03-25 16:33:22
【问题描述】:

我想将多个具有不同类型的变量连接成一个字符串。这很好用:

q)"select ", string[10:00:00] ," abc"
"select 10:00:00 abc"

当我用括号调用字符串时,输出是不同的:

q)"select ", string(10:00:00) ," abc"
"s"
"e"
"l"
"e"
"c"
"t"
" "
"10:00:00"
," "
,"a"
,"b"
,"c"

我认为在第一个示例中,函数字符串是使用时间类型的原子参数调用的,而在第二个调用中,时间 list 在调用字符串之前创建。

第二个例子的输出说明了什么?

【问题讨论】:

    标签: kdb q-lang


    【解决方案1】:

    使用 string[10:00:00],您将在输入 10:00:00 上调用字符串函数。使用 string (10:00:00) ,"abc" ,您实际上将 (10:00:00) 连接到 "abc" ,然后将结果串起来。您必须记住,执行是从右到左进行的。

    q)(10:00:00) ," abc"
    10:00:00
    " "
    "a"
    "b"
    "c"
    q)string (10:00:00) ," abc"
    "10:00:00"
    ," "
    ,"a"
    ,"b"
    ,"c"
    

    【讨论】:

    • 为什么两个示例中的结果都是垂直打印的?您的答案中每个命令产生的类型是什么?
    • "abc" 只是 4 个字符元素的列表。当您加入 10:00:00 时,您将创建一个包含 5 个元素的混合列表。 q)count (10:00:00)," abc"(返回 5)。为了生成 2 个列表列表,您首先需要获取字符串。 q)count l:(10:00:00),enlist " abc"(返回 2)。 q)l (返回 (10:00:00;"abc"))
    • 好的,所以第二个命令输出中的逗号表示对 string() 的不同调用,每个原子类型都有一个调用(而不是第一个命令结果中的列表)。我说的对吗?
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2019-08-14
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多