问题描述
我在“ Q技巧”中发现了一种在表中保留键的技术。例如,这对于lj
右表中的限制列很有用,而无需重新应用键。使用each
:
q)show t:(`c1`c2!1 2;`c1`c2!3 4)!(`c3`c4`c5!30 40 50;`c3`c4`c5!31 41 51)
c1 c2| c3 c4 c5
-----| --------
1 2 | 30 40 50
3 4 | 31 41 51
q)`c3`c4#/:t
c1 c2| c3 c4
-----| -----
1 2 | 30 40
3 4 | 31 41
我试图理解为什么它保留了表key
的{{1}}部分:
t
但是在这种情况下,q){-3!x}/:t
'/:
[0] {-3!x}/:t
^
没有显示如何处理键表的q
。
那为什么each row
语法对于键控表如此工作?在code.kx.com文档中的任何地方都有提及吗?
Upd1 :我发现了一个#/:t
和code.kx.com上的键控表的情况,但这是关于选择行而不是列的情况。
解决方法
如果将键表视为字典(它是字典),则它与以下内容没有什么不同:
$color: #bada55;
body {
height: 100vh;
width: 100vw;
background-color: #222;
color: #fff;
}
.container {
padding: 2rem 0;
display: flex;
justify-content: center;
align-items: center;
}
.nav {
display: flex;
li {
list-style: none;
font-weight: bold;
font-size: 2rem;
margin: 20px;
padding: 10px;
position: relative;
transition: 0.2s;
&:hover {
color: #bada55;
transition: 0.2s;
&:before {
content: "";
background-color: #bada55;
width: 100%;
height: 3px;
position: absolute;
display: block;
top: 4rem;
left: 0;
overflow: hidden;
animation: slide 0.5s;
transition: 0.2s;
}
}
}
}
@keyframes slide {
0% {
opacity: 0;
transform: translateX(-20px);
width: 0%;
}
100% {
opacity: 1;
transform: translateX(1);
width: 100%
}
}
或
q)2*/:`a`b!1 2
a| 2
b| 4
将功能应用于字典的每个元素时,键将保留。在您的示例中,要应用的功能是在字典上使用take,例如:
q){x+1} each `a`b!1 2
a| 2
b| 3
对每一行执行该操作会返回字典列表,而字典本身就是一个表。
另外,您的其他尝试也将如下:
q)`c3`c4#first t
c3| 30
c4| 40
因此服用{-3!x}@/:t
{-3!x}/:t
每个权利都需要两个参数,因此这将无法工作。
由于表是带键的,因此将其视为字典。每个权限都会迭代字典值,因此会忽略主字典的键(=键列)。要查看正在发生的事情,可能会有助于查看使用每个时发生的事情:
q)){-3!x} each t
c1 c2|
-----| --------------------
1 2 | "`c3`c4`c5!30 40 50"
3 4 | "`c3`c4`c5!31 41 51"