如何使用翻转反转字符串中字符集的顺序?
How to reverse the order of sets of characters in a string using flip?
我想颠倒列表中每个元素的货币顺序,即 CADUSD 需要变成 USDCAD。
ccys:("CADUSD";"NZDUSD"; "USDAUD")
"" sv/:flip(-3,3)#'\:ccys
以上就是这样做的。我读过 flip x returns x transposed 并且 # 是 take 运算符;但我无法清楚地理解 ' 和 flip(-3,3)# 是如何实现的。
你能帮我理解一下吗?
或者,有没有更简单的方法来做同样的事情?
因为 ccys 和 (-3 3) 的长度不同,您需要 each left 和 each both 将 3 和 -3 与 #
应用于 ccys 中的每个字符串而不是 ccys 本身。
// each left will apply -3 & 3 # to the entire ccys list
q)-3 3#\:ccys
"CADUSD" "NZDUSD" "USDAUD"
"CADUSD" "NZDUSD" "USDAUD"
// each both will then apply the -3 & 3 # to each nested string
q)(-3,3)#'\:ccys
"USD" "USD" "AUD"
"CAD" "NZD" "USD"
// flip then transposes the 2 by 3 matrix of strings
// to a 3 by 2 matrix of strings
q)flip (-3,3)#'\:ccys
"USD" "CAD"
"USD" "NZD"
"AUD" "USD"
// this each right sv (scalar from vector) will merge each
// ccy into a currency pair. sv basically combines a list of strings,
// seperated by the left argument which in this case is nothing / ""
"" sv/:
// I would more commonly use raze each for this part:
q)raze each flip -3 3#'\:ccys
"USDCAD"
"USDNZD"
"AUDUSD"
至于更简单的方法,由于字符串的长度都相同,而您只想交换前 3 个字符和后 3 个字符,您可以通过深度索引来实现:
q)ccys[;3 4 5 0 1 2]
"USDCAD"
"USDNZD"
"AUDUSD"
如果您知道所有货币都是 3 个字符,rotate
关键字也可以实现此目的:
q)3 rotate/:ccys
"USDCAD"
"USDNZD"
"AUDUSD"
我想颠倒列表中每个元素的货币顺序,即 CADUSD 需要变成 USDCAD。
ccys:("CADUSD";"NZDUSD"; "USDAUD")
"" sv/:flip(-3,3)#'\:ccys
以上就是这样做的。我读过 flip x returns x transposed 并且 # 是 take 运算符;但我无法清楚地理解 ' 和 flip(-3,3)# 是如何实现的。
你能帮我理解一下吗? 或者,有没有更简单的方法来做同样的事情?
因为 ccys 和 (-3 3) 的长度不同,您需要 each left 和 each both 将 3 和 -3 与 #
应用于 ccys 中的每个字符串而不是 ccys 本身。
// each left will apply -3 & 3 # to the entire ccys list
q)-3 3#\:ccys
"CADUSD" "NZDUSD" "USDAUD"
"CADUSD" "NZDUSD" "USDAUD"
// each both will then apply the -3 & 3 # to each nested string
q)(-3,3)#'\:ccys
"USD" "USD" "AUD"
"CAD" "NZD" "USD"
// flip then transposes the 2 by 3 matrix of strings
// to a 3 by 2 matrix of strings
q)flip (-3,3)#'\:ccys
"USD" "CAD"
"USD" "NZD"
"AUD" "USD"
// this each right sv (scalar from vector) will merge each
// ccy into a currency pair. sv basically combines a list of strings,
// seperated by the left argument which in this case is nothing / ""
"" sv/:
// I would more commonly use raze each for this part:
q)raze each flip -3 3#'\:ccys
"USDCAD"
"USDNZD"
"AUDUSD"
至于更简单的方法,由于字符串的长度都相同,而您只想交换前 3 个字符和后 3 个字符,您可以通过深度索引来实现:
q)ccys[;3 4 5 0 1 2]
"USDCAD"
"USDNZD"
"AUDUSD"
如果您知道所有货币都是 3 个字符,rotate
关键字也可以实现此目的:
q)3 rotate/:ccys
"USDCAD"
"USDNZD"
"AUDUSD"