我(\\)在Haskell中听到了"列表差异" 运算符这个术语,但仍然不知道如何理解它.任何例子或想法?
简而言之:我有两个可能不同的数组,我希望将差异/转换作为一系列"动作"(添加和删除).也就是说,在一个基本的例子中:
Current: [a, b, d]
Desired: [a, b, c, d]
Actions: Add c in position 2
Run Code Online (Sandbox Code Playgroud)
基本上,指令是如何转换当前数组,以便它具有与所需数组相同的成员和顺序.对于我的应用程序,每个更改都会触发更新UI等的事件,因此如果操作不是"冗余"的话,这将是非常可取的:也就是说,上面可能已经存在remove d, add c @ 2, add d @ 3,但这会导致其他地方的大量不需要的处理系统.
也许作为另一个可能有助于说明的例子:
Current: [a, b, d]
Desired: [b, c, d, a]
Actions: remove a, add c @ 1, add a @ 3
Run Code Online (Sandbox Code Playgroud)
我认为这是之前已经解决过的问题,但是搜索它有点困难,因为"数组差异"并没有给你正确的结果.
如果重要的话,我在Javascript中实现这个,但我想这个算法是语言无关的.
我已经阅读了很多这方面的内容,但我还没有得到有效的答案。
我一直在使用setdiffR 中的函数来查看两个数据帧之间的匹配数。我知道 200 个观察结果中有 71 个匹配,其余的不匹配。
到目前为止,我刚刚这样做是为了获取匹配和不匹配值的数量:
check = setdiff(dataset1$variable1, dataset2$variable1)
Run Code Online (Sandbox Code Playgroud)
如何返回匹配和不匹配值的列表?
谢谢,
埃德
示例数据
\n\nv1 <- c("E82391", "X2329323", "C239923", "E1211", "N23932", "F93249232", "X93201", "X9023111", "O92311", "9000F", "K9232932", "L9232932", "X02311111")\nv2 <- c("L9232932", "C239923", "E1211", "E82391", "F93249232", "U82832")\nRun Code Online (Sandbox Code Playgroud)\n\n问题
\n\n我只想提取其中一个向量中的项目,而不是另一个向量中的项目。
\n\n据我所知,setdiff无法比较两个无序字符向量并找到两者之间的所有差异。
例如,是否%in%在两个字符向量之间执行全面比较?
在这种情况下,它确实有效(尽管它不报告那些位于v2和不位于 中的元素v1)。
> v1[!v1 %in% v2]\n[1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F" "K9232932" "X02311111"\nRun Code Online (Sandbox Code Playgroud)\n\n另一种方法是使用用户定义的函数,其名称outersect如下所示,它显示了所有差异。
outersect <- function(x, y) {\n sort(c(x[!x%in%y],\n y[!y%in%x]))\n}\n\noutersect(v1,v2)\nRun Code Online (Sandbox Code Playgroud)\n\n问题
\n\n我真的很想知道是否有任何 R 函数可以轻松地在两个字符向量之间执行全面比较!这个想法是为了真正提高代码的可读性(特别是当有数十个向量需要相互比较时)。
\n\n执行这种全面比较的最安全、最有效的方法是什么?更具体地说,R 中是否有一个函数可以
\n\n …python 集合中的difference()和symmetric_difference()方法之间有什么区别?
我想要做的或多或少是以下两个线程中讨论的问题的组合:
我有两个数字向量:
b_1 <- c(543.4591, 489.36325, 12.03, 896.158, 1002.5698, 301.569)
b_2 <- c(22.12, 53, 12.02, 543.4891, 5666.31, 100.1, 896.131, 489.37)
Run Code Online (Sandbox Code Playgroud)
我想将所有元素b_1与所有元素进行比较b_2,反之亦然。
如果element_i在b_1被不等于任意数量的范围 element_j ± 0.045中b_2则element_i必须报告。
同样地,如果element_j在b_2被NOT等于任何数目的范围 element_i ± 0.045中b_1则element_j必须报告。
因此,基于上面提供的向量的示例答案将是:
### based on threshold = 0.045
in_b1_not_in_b2 <- c(1002.5698, …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> v = {1, 3, 4};
std::cout << v.size() << std::endl;
v.resize(0);
std::cout << v.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
编译输出后,如预期的那样,是
3
0
Run Code Online (Sandbox Code Playgroud)
现在我添加一组差异。
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> x = {1, 3, 4};
std::list<int> y = {1, 2, 3, 5};
std::list<int> v;
x.sort();
y.sort();
std::cout << v.size() << std::endl;
auto it =
std::set_difference(x.begin(), x.end(), y.begin(), y.end(), v.begin());
std::cout << v.size() << std::endl;
v.resize(0);
std::cout << v.size() …Run Code Online (Sandbox Code Playgroud) 我想在2个整数列表之间设置差异,这允许在haskell中重复.
因此,如果有[1,2,1,4,3] [1,2,4],差异将是[1,3]
目前我可以通过普通\\运营商来做到这一点listA \\ listB.
但问题是这个问题太慢了.由于整数在ord组中,因此可以更快地完成.
我知道这个Data.Multiset模块可以更快地完成它,但是在没有Data.Multiset模块的列表上有没有本地方法呢?
我有两个char载体说{'G', 'K', 'A', 'L', 'P'}和{'K', 'P', 'T', 'M'}.我必须在保留顺序的同时得到这两个向量之间的差异{'G', 'A', 'L'}.
我知道std::set_difference函数但不能使用,因为这将需要对向量进行排序.有没有优化的方法在C++中执行此操作?