Kdb和x2B/q:在初始化列表上循环

Kdb和x2B/q:在初始化列表上循环,kdb,Kdb,假设我创建了一个空表: test:([] name:`symbol$(); balance:`int$()); 现在,让我们用一行填充此列表: insert[`test;(`John;1001)]; 现在,如果我想循环这个表,如下所示: n:0; k:0; f:{x%100} do[count test; k+:f[test.balance[n]]; n+:1] 然后它给了我一个错误,因为它试图用函数f使用(计算)空初始化值 这不起作用有什么特别的原因吗 我怎样才能确保它能起作用呢?你所做

假设我创建了一个空表:

test:([] name:`symbol$(); balance:`int$());
现在,让我们用一行填充此列表:

insert[`test;(`John;1001)];
现在,如果我想循环这个表,如下所示:

n:0;
k:0;
f:{x%100}
do[count test; k+:f[test.balance[n]]; n+:1]
然后它给了我一个错误,因为它试图用函数
f
使用(计算)空初始化值

这不起作用有什么特别的原因吗


我怎样才能确保它能起作用呢?

你所做的可能会起作用,但离最佳实践还差得远。循环和索引不是我们要走的路

你要找的基本上是

test:([] name:`symbol$(); balance:`int$());
insert[`test;(`John;1001)];
insert[`test;(`Jane;2002)];

q)select sum f[balance] from test
balance
-------
30.03

你所做的可能有用,但远不是最佳实践。循环和索引不是我们要走的路

你要找的基本上是

test:([] name:`symbol$(); balance:`int$());
insert[`test;(`John;1001)];
insert[`test;(`Jane;2002)];

q)select sum f[balance] from test
balance
-------
30.03

你所做的可能有用,但远不是最佳实践。循环和索引不是我们要走的路

你要找的基本上是

test:([] name:`symbol$(); balance:`int$());
insert[`test;(`John;1001)];
insert[`test;(`Jane;2002)];

q)select sum f[balance] from test
balance
-------
30.03

你所做的可能有用,但远不是最佳实践。循环和索引不是我们要走的路

你要找的基本上是

test:([] name:`symbol$(); balance:`int$());
insert[`test;(`John;1001)];
insert[`test;(`Jane;2002)];

q)select sum f[balance] from test
balance
-------
30.03



你的函数
f
在我看来很奇怪。你想除名吗?@WooiKentLee是的,我是。有点打字错误:P@WooiKentLee这个例子只是为了说明。实际代码看起来不同,但做的是相同的事情(或多或少)。我只能推断
test.balance[n]
没有返回正确的值以使
f
正常工作。对
test.balance
的更多了解将很有帮助。@WooiKentLee
test.balance
test
表的列。这种语法是允许的,对吗?你的函数
f
在我看来很奇怪。你想除名吗?@WooiKentLee是的,我是。有点打字错误:P@WooiKentLee这个例子只是为了说明。实际代码看起来不同,但做的是相同的事情(或多或少)。我只能推断
test.balance[n]
没有返回正确的值以使
f
正常工作。对
test.balance
的更多了解将很有帮助。@WooiKentLee
test.balance
test
表的列。这种语法是允许的,对吗?你的函数
f
在我看来很奇怪。你想除名吗?@WooiKentLee是的,我是。有点打字错误:P@WooiKentLee这个例子只是为了说明。实际代码看起来不同,但做的是相同的事情(或多或少)。我只能推断
test.balance[n]
没有返回正确的值以使
f
正常工作。对
test.balance
的更多了解将很有帮助。@WooiKentLee
test.balance
test
表的列。这种语法是允许的,对吗?你的函数
f
在我看来很奇怪。你想除名吗?@WooiKentLee是的,我是。有点打字错误:P@WooiKentLee这个例子只是为了说明。实际代码看起来不同,但做的是相同的事情(或多或少)。我只能推断
test.balance[n]
没有返回正确的值以使
f
正常工作。对
test.balance
的更多了解将很有帮助。@WooiKentLee
test.balance
test
表的列。这种语法是允许的,对吗?所以查询是一种方法。我懂了。我在序列函数中使用结果,所以我仍然需要习惯将查询输出分配给变量(来自OOP)。是的,有点调整!如果只想提取值(在上面的示例中为30.03)并将其分配给变量,可以使用“exec”。例如:myvar:exec sum f[balance]from testThank!我将为我的实际代码试用它。我怀疑这也是更好的性能方面?是的,更好的性能方面。Kdb在对向量/列表(这正是平衡列)而不是单个项进行操作时表现最佳。您的意思是如何将列提取为列表?又是exec。mylist:来自测试的exec余额;如果你问如何从余额中减去,你可以这样做:exec balance myOtherList from testSo querys。我懂了。我在序列函数中使用结果,所以我仍然需要习惯将查询输出分配给变量(来自OOP)。是的,有点调整!如果只想提取值(在上面的示例中为30.03)并将其分配给变量,可以使用“exec”。例如:myvar:exec sum f[balance]from testThank!我将为我的实际代码试用它。我怀疑这也是更好的性能方面?是的,更好的性能方面。Kdb在对向量/列表(这正是平衡列)而不是单个项进行操作时表现最佳。您的意思是如何将列提取为列表?又是exec。mylist:来自测试的exec余额;如果你问如何从余额中减去,你可以这样做:exec balance myOtherList from testSo querys。我懂了。我在序列函数中使用结果,所以我仍然需要习惯将查询输出分配给变量(来自OOP)。是的,有点调整!如果只想提取值(在上面的示例中为30.03)并将其分配给变量,可以使用“exec”。例如:myvar:exec sum f[balance]from testThank!我将为我的实际代码试用它。我怀疑这也是更好的性能方面?是的,更好的性能方面。Kdb在对向量/列表(这正是平衡列)而不是单个项进行操作时表现最佳。您的意思是如何将列提取为列表?又是exec。mylist:来自测试的exec余额;如果你问如何从余额中减去,你可以这样做:exec balance myOtherList from testSo querys。我懂了。我在序列函数中使用结果,所以我仍然需要习惯将查询输出分配给变量(来自OOP)。是的,有点调整!如果只想提取值(在上面的示例中为30.03)并将其分配给变量,可以使用“exec”。例如:myvar:exec su