Q 中使用 "Each" 语句的嵌套 For 循环等效项
Nested For Loop Equivalent using "Each" Statement in Q
我正在学习 Q 编程语言,因为我的新工作需要它。我正在做一些练习,想知道是否可以使用“each”关键字来模仿嵌套循环。
例如,我知道:
f:{x*x}
a:(1;2;3;4;5)
f each a -> 1 4 9 16 25j
但是,假设我想模仿一个嵌套的 for 循环来乘以两个列表的值。如果我们有:
a:(1;2;3;4;5)
b:(1;2;3;4;5)
在传统的 java 中,这将通过以下方式完成:
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < b.length; j++) {
System.out.println(a[i]*b[j]);
}
}
是否可以在 q 中使用“each”来模仿这种嵌套的 for 循环结构?
您可以在 kdb 中使用迭代器(以前称为副词)来实现此目的
乙
a*/:b // Each Right
将 b 的每个元素乘以 a 的每个元素。在这种情况下,就好像您在外循环中迭代 b,在内循环中迭代 a。
你可以把它翻到
a*\:b // Each Left
这将在你的外循环中有 a 而在你的内循环中有 b。
如果 a 和 b 的长度相同,并且您想按元素相乘,那么您可以做一个简单的
a*b
有关迭代器的更多信息:
https://code.kx.com/q/wp/iterators/
我正在学习 Q 编程语言,因为我的新工作需要它。我正在做一些练习,想知道是否可以使用“each”关键字来模仿嵌套循环。
例如,我知道:
f:{x*x}
a:(1;2;3;4;5)
f each a -> 1 4 9 16 25j
但是,假设我想模仿一个嵌套的 for 循环来乘以两个列表的值。如果我们有:
a:(1;2;3;4;5)
b:(1;2;3;4;5)
在传统的 java 中,这将通过以下方式完成:
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < b.length; j++) {
System.out.println(a[i]*b[j]);
}
}
是否可以在 q 中使用“each”来模仿这种嵌套的 for 循环结构?
您可以在 kdb 中使用迭代器(以前称为副词)来实现此目的 乙
a*/:b // Each Right
将 b 的每个元素乘以 a 的每个元素。在这种情况下,就好像您在外循环中迭代 b,在内循环中迭代 a。
你可以把它翻到
a*\:b // Each Left
这将在你的外循环中有 a 而在你的内循环中有 b。 如果 a 和 b 的长度相同,并且您想按元素相乘,那么您可以做一个简单的
a*b
有关迭代器的更多信息: https://code.kx.com/q/wp/iterators/