【发布时间】:2017-11-29 06:27:12
【问题描述】:
我有一列包含 EURUSD、USDINR 等符号。我需要根据货币对的前三个或后三个字母是否属于此列表的条件创建一个新列
参考:(“INR”,“BLR”....)
然后我必须创建一个新列“结果”并将其更新为“是”,如果条件满足否则“否”。
谁能帮我解决这个问题。谢谢
【问题讨论】:
我有一列包含 EURUSD、USDINR 等符号。我需要根据货币对的前三个或后三个字母是否属于此列表的条件创建一个新列
参考:(“INR”,“BLR”....)
然后我必须创建一个新列“结果”并将其更新为“是”,如果条件满足否则“否”。
谁能帮我解决这个问题。谢谢
【问题讨论】:
给定
q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR)
pair
------
EURUSD
USDINR
BLRUSD
INRBLR
BLREUR
和
q)ref:`USD`EUR
添加描述的“结果”列的直接查询是
q)update result:((`$3_'string pair)in\:ref)or(`$3#'string pair)in\:ref from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
但以下替代方案可能会更快:
q)update result:0<count each ref inter/:`$0 3_/:string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
【讨论】:
另一种选择。检查每对中的 ref 和结果列表中每对值的 OR
q)ref:`USD`EUR
q)update result:(|/')ref in/: `$0 3_/: string pair from t
pair result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
【讨论】:
给出相同的示例表 t 和 Alexanders 示例中的引用 ref,您还可以建立一个匹配的开始和结束序列的列表:
q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref
"USD*"
"EUR*"
"*USD"
"*EUR"
然后找到匹配的对:
q)update max each pair like/:\:m from t
pair m
--------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
当还考虑构建列表m 和运行查询的时间时,此示例的效率低于上述示例。如果您只需要构建列表m,那么此示例可能更高效,但这将取决于列表ref 的大小。
【讨论】: