Table 转换,table 作为字典列表
Table transformation, table as list of dicts
请通过以下路径帮助我t1
转换:
t1:enlist `a`b!1 2;
t2:exec val from ([]val:t1);
-3!t1 // +`a`b!(,1;,2)
-3!t2 // ,`a`b!1 2
t1~t2[;] // 1b
我希望第二行 (exec
) returns 与 t1
是同一个对象,但事实并非如此。由于某种原因,只有 [;]
从 t2
.
得到 t1
那么第 2 行和第 5 行发生了什么(以及为什么)?
UPD
为什么 enlist
如此富有成效?它为每个元素进行登记,并且翻转整个对象
-3!enlist `a`b!1 2 // +`a`b!(,1;,2)
-3!enlist each `a`b!1 2 // `a`b!(,1;,2)
-3!flip enlist each `a`b!1 2 // +`a`b!(,1;,2)
我认为这里发生的事情是,当它成为 table 的列时,将(符合的)词典列表特别提升到 table 本质上是“撤消”的。它可以追溯到字典列表,就好像它们是不符合规范的一样,尽管终端仍然误导性地将它显示为 table。要了解这一点,请考虑以下示例:
/promoted to table
q)-3!(`a`b!4 5;`a`b!1 2)
"+`a`b!(4 1;5 2)"
/still a table (embedded)
q)-3!enlist(`a`b!4 5;`a`b!1 2)
",+`a`b!(4 1;5 2)"
/still a table (embedded)
q)-3!(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"(,`val)!,+`a`b!(4 1;5 2)"
/no longer a table, now a list of dictionaries
q)-3!flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"+(,`val)!,(`a`b!4 5;`a`b!1 2)"
/extracting the column gives an "un-promoted" list of dictionaries
q)-3!exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"(`a`b!4 5;`a`b!1 2)"
/even though there are two of them and they both have type 99h, it is not a table
q)count exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
2
q)type each exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
99 99h
q)type exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
0h
/so it is not comparable to something that has the promotion, even though the terminal makes them appear the same
q)((`a`b!4 5;`a`b!1 2))~exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
0b
q)(`a`b!4 5;`a`b!1 2)
a b
---
4 5
1 2
q)exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
a b
---
4 5
1 2
你的情况是一样的,只是一个字典而不是两个,但我认为两个字典更容易看。
请通过以下路径帮助我t1
转换:
t1:enlist `a`b!1 2;
t2:exec val from ([]val:t1);
-3!t1 // +`a`b!(,1;,2)
-3!t2 // ,`a`b!1 2
t1~t2[;] // 1b
我希望第二行 (exec
) returns 与 t1
是同一个对象,但事实并非如此。由于某种原因,只有 [;]
从 t2
.
t1
那么第 2 行和第 5 行发生了什么(以及为什么)?
UPD
为什么 enlist
如此富有成效?它为每个元素进行登记,并且翻转整个对象
-3!enlist `a`b!1 2 // +`a`b!(,1;,2)
-3!enlist each `a`b!1 2 // `a`b!(,1;,2)
-3!flip enlist each `a`b!1 2 // +`a`b!(,1;,2)
我认为这里发生的事情是,当它成为 table 的列时,将(符合的)词典列表特别提升到 table 本质上是“撤消”的。它可以追溯到字典列表,就好像它们是不符合规范的一样,尽管终端仍然误导性地将它显示为 table。要了解这一点,请考虑以下示例:
/promoted to table
q)-3!(`a`b!4 5;`a`b!1 2)
"+`a`b!(4 1;5 2)"
/still a table (embedded)
q)-3!enlist(`a`b!4 5;`a`b!1 2)
",+`a`b!(4 1;5 2)"
/still a table (embedded)
q)-3!(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"(,`val)!,+`a`b!(4 1;5 2)"
/no longer a table, now a list of dictionaries
q)-3!flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"+(,`val)!,(`a`b!4 5;`a`b!1 2)"
/extracting the column gives an "un-promoted" list of dictionaries
q)-3!exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
"(`a`b!4 5;`a`b!1 2)"
/even though there are two of them and they both have type 99h, it is not a table
q)count exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
2
q)type each exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
99 99h
q)type exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
0h
/so it is not comparable to something that has the promotion, even though the terminal makes them appear the same
q)((`a`b!4 5;`a`b!1 2))~exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
0b
q)(`a`b!4 5;`a`b!1 2)
a b
---
4 5
1 2
q)exec val from flip(1#`val)!enlist(`a`b!4 5;`a`b!1 2)
a b
---
4 5
1 2
你的情况是一样的,只是一个字典而不是两个,但我认为两个字典更容易看。