- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个内存中的柱状关系引擎。为了提取我想要进行后期实现的值,我在其中收集找到匹配项的位置/索引,并在最后收集这些值。
现在实现连接,我看不出覆盖所有其他情况的通用连接算法是如何实现的。 Left、Right & Inner 很容易,但 FULL/Outer 则不然。这是我使用嵌套循环的天真实现:
pub fn join(&self, compare:&BoolExpr) -> JoinPos
{
//Allocate at least for inner joins...
let total = cmp::max(self.left.len(), self.right.len());
let mut cols_left = Vec::with_capacity(total);
let mut cols_right = Vec::with_capacity(total);
let mut found = false;
while !self.left.eof() {
let left = self.left.tuple();
while !self.right.eof() {
let right = self.right.tuple();
if compare(&left, &right) {
//A match found. Record positions of both cursors
cols_left.push(self.left.pos() as isize);
cols_right.push(self.right.pos() as isize);
found = true;
}
self.right.next();
}
//Not found a single match at the right cursor..
if !found {
cols_left.push(self.left.pos() as isize);
cols_right.push(-1);
}
found = false;
self.left.next();
self.right.first();
}
JoinPos {
left:cols_left,
right:cols_right,
}
}
现在,问题是我可以在没有另一遍的情况下找到左边的东西,而不是相反的东西:
Input:
L= [1, 2, 3]
R= [2, 3, 4]
Result. It capture the positions that match. -1 if not found
L | R
======
1 -1
2 1
3 2
-1 3
感谢@philipxy,我有了一个可行的解决方案:
pub fn join(&self, compare:&BoolExpr) -> JoinPos
{
let total = cmp::max(self.left.len(), self.right.len());
let mut right_not_founds = HashSet::new();
let mut cols_left = Vec::with_capacity(total);
let mut cols_right = Vec::with_capacity(total);
let mut found = false;
let mut first = true;
while !self.left.eof() {
let left = self.left.tuple(&self.cols_left);
while !self.right.eof() {
let right = self.right.tuple(&self.cols_right);
if first {
right_not_founds.insert(self.right.pos());
}
if compare(&left, &right) {
cols_left.push(self.left.pos() as isize);
cols_right.push(self.right.pos() as isize);
right_not_founds.remove(&self.right.pos());
found = true;
}
self.right.next();
}
if !found {
cols_left.push(self.left.pos() as isize);
cols_right.push(-1);
}
found = false;
first = false;
self.left.next();
self.right.first();
}
for pos in right_not_founds {
cols_left.push(-1);
cols_right.push(pos as isize);
}
JoinPos {
left:cols_left,
right:cols_right,
}
}
最佳答案
全连接返回内连接元组联合不匹配的由空值扩展的左表元组联合不匹配的由空值扩展的右表元组。
目前您的代码输出左连接元组。外循环的每次迭代都会输出更多位于内连接中的元组,或者输出与任何右表元组都不匹配的左表元组的空扩展。要输出完整连接元组,您还必须输出与任何左表元组不匹配的每个右表元组的空扩展。您可以按如下方式执行此操作: 在循环之前定义一个设置变量。它最终将包含与任何左表元组不匹配的右表元组的所有位置/索引。在 if compare
之前,如果它是外循环的第一次迭代,则将正确的元组位置/索引插入到集合中。在 if compare
的嵌套 block 内,从集合中删除正确的元组位置/索引。
关于join - 可以在单次传递中为内存结构构建 FULL JOIN(不使用 sql!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52239451/
我在看 this post在 GitHub 中,但我无法理解 OP 的含义: “全表达式”暗示是一种表达式,但有时又不是。 我的解释是“完整表达式”(标准中使用的术语)可能不是表达式。 [intro.
我正在研究数字图像处理。当我尝试加载更高分辨率的图像时,我遇到了很多 OOM 问题。 我正在将这些启动参数与应用程序一起使用 -Xms10240m -Xmx10240m -XX:NewRatio=3
我为我的 java 应用程序配置了以下参数 -Xmx = 46g,-Xms = 46g,NewSize = 2g。 我们没有为 permgen 配置大小,但在 JCONSOLE 中它显示最大 perm
我正在尝试构建以下布局: +-----------------------------------+ | | +----------
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我已经多次看到这个问题被问到,但是当我尝试实现他们的解决方案时,它似乎不起作用。 我目前开始使用外部样式表涉足 HTML 和 CSS。 我创建了一个包含以下内容的容器(边框只是为了帮助我了解容器):
假设您有一个 (1) Intel/AMD x86-64 位 2 GHz 8 核处理器。 8 个内核中的每一个是否都以完整的 2 GHz 运行,或者每个内核是否以完整的 2 GHz 时钟的一部分运行(例
我想使用 RavenDb 4.0.0-beta-40018 查询一个包含动态属性的实体,但我不确定如何去做。 class Foo { public int Id { get; set; }
我的全文搜索索引有问题。我有一个字符字段大小为 30 的表。我在这个字段上创建了一个全文搜索索引,以便在这个不区分大小写的字段上进行快速搜索操作。现在,当我执行以下查询时:SELECT fieldna
如果我有一个 64 长度的 java 数组 i[],除了循环整个数组之外,是否有一种快速方法可以找出该数组中的每个位置是否“已满”?我正在编写一个黑白棋 AI,我需要知道整个数组是否已满。 最佳答案
stackoverflow 上有很多关于如何正确执行分页的问题,对于 Oracle,最流行的答案是这样的: select * from ( select row_.*, rownum rown
我有套接字应用程序,其代码片段如下。我已确保套接字在finally block 中关闭。我猜我昨天或前天刚刚进行了一次 Full GC。然后我通过jmap比较这次FGC之前和今天FGC之后的套接字实例
这里是我的 gc.log 的摘录: 2013-02-28T12:02:13.209+0100: 1486457.849: [GC 1486457.850: [ParNew 3483368K->9683
我有一个在一个 tomcat 实例上运行的 Java webapp。在高峰时段,Web 应用程序每秒提供大约 30 个页面,通常约为 15 个页面。 我的环境是: O/S: SUSE Linux En
我有一个包含一个日期时间列的表。我只需要返回最近 6 个月的行。这可以通过 WHERE CloseTime >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m
如何获取 SVN 存储库的完整副本并将其导入到另一台服务器上? 最佳答案 您想要执行 svnadmin 转储。您可以通过 svnadmin help dump 或 reading the docs 获
当我使用 Wikipedia API 执行全文搜索时,我无法将搜索范围缩小到仅标题 (srwhat=title)。 所以在任何地方搜索时(默认) http://en.wikipedia.org/w/a
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我想在数十亿个字符串中进行一般的子字符串搜索。该要求与一般全文搜索略有不同,因为我希望查询“ubst”也可以点击“substr”。 Lucene 或 Sphinx 是否能够做到这一点?如果没有,您认为
Sphinx 可以在一个句子中搜索单词。例如,我们有下一个文本: Вася молодец, съел огурец, т.к. проголодался. Такие дела. 如果我搜索 мол
我是一名优秀的程序员,十分优秀!