将字典连接到字符串的最干净的方法?
Cleanest way of joining a dictionary to a string?
假设我有
k: `a`b`c
v: 1 2 3
我们如何制作以下形式的字符串:
a=1&b=2&c=3
以下 lambda 可以完成您想要的(接受字典作为其参数):
{"&" sv "=" sv/: string flip (key;value)@\:x} `a`b`c!1 2 3
这是非常具体的情况,但如果您只是为了“显示”目的而这样做,那么您可以使用内置的 .Q.s
q)ssr/[-2_.Q.s d;("| ";"\r\n");("=";"&")]
"a=1&b=2&c=3"
虽然输出会受到控制台大小的限制,因此出于所有实际目的,您 would/should 使用 kylebonnes 答案。
编辑:.Q.s2
让你也很接近:
q)"&"sv"="^.Q.s2 d
"a|=1&b|=2&c|=3"
EDIT2:根据您进一步披露的目的是构建查询字符串,然后我还有一些其他评论:
- 您很可能需要逗号
,
而不是 &
。您通常不应在查询的 where 子句中使用 &
。
- 如果你的字典值中有符号,我的和 kylebonnes 的解决方案都不适合你,例如
d:`a`b`c!`one`two`three
并且您正在尝试构建一个查询
where a=`one,b=`two,c=`three
在这种情况下,您必须尝试使用 maybe .Q.s1
或有逻辑来放置反引号。
- 另一种方法可能是构建查询的函数形式,但您仍然会遇到类似的问题
q)"?[t;",(-3!{(=;x;d x)}each key d),";0b;()]"
"?[t;((=;`a;1);(=;`b;2);(=;`c;3));0b;()]"
- 最终,制造复杂的查询字符串以发送到 kdb 服务器并不是一个好的做法。你能把你想要的查询包装成一个函数并在服务器上定义这个函数吗?然后你的 URL 只需要调用这个函数。为什么不能向 kdb 服务器发送直接同步调用,例如
h:hopen`::1234;
h({<function to generate query without having to string>};`a`b`c!1 2 3)
假设我有
k: `a`b`c
v: 1 2 3
我们如何制作以下形式的字符串:
a=1&b=2&c=3
以下 lambda 可以完成您想要的(接受字典作为其参数):
{"&" sv "=" sv/: string flip (key;value)@\:x} `a`b`c!1 2 3
这是非常具体的情况,但如果您只是为了“显示”目的而这样做,那么您可以使用内置的 .Q.s
q)ssr/[-2_.Q.s d;("| ";"\r\n");("=";"&")]
"a=1&b=2&c=3"
虽然输出会受到控制台大小的限制,因此出于所有实际目的,您 would/should 使用 kylebonnes 答案。
编辑:.Q.s2
让你也很接近:
q)"&"sv"="^.Q.s2 d
"a|=1&b|=2&c|=3"
EDIT2:根据您进一步披露的目的是构建查询字符串,然后我还有一些其他评论:
- 您很可能需要逗号
,
而不是&
。您通常不应在查询的 where 子句中使用&
。 - 如果你的字典值中有符号,我的和 kylebonnes 的解决方案都不适合你,例如
d:`a`b`c!`one`two`three
并且您正在尝试构建一个查询
where a=`one,b=`two,c=`three
在这种情况下,您必须尝试使用 maybe .Q.s1
或有逻辑来放置反引号。
- 另一种方法可能是构建查询的函数形式,但您仍然会遇到类似的问题
q)"?[t;",(-3!{(=;x;d x)}each key d),";0b;()]"
"?[t;((=;`a;1);(=;`b;2);(=;`c;3));0b;()]"
- 最终,制造复杂的查询字符串以发送到 kdb 服务器并不是一个好的做法。你能把你想要的查询包装成一个函数并在服务器上定义这个函数吗?然后你的 URL 只需要调用这个函数。为什么不能向 kdb 服务器发送直接同步调用,例如
h:hopen`::1234;
h({<function to generate query without having to string>};`a`b`c!1 2 3)