我有两个数组(或者更简单的arraylists)字符串。我需要比较这些,找到只存在于第一个数组中的数据,它们存在于两者中,并且只存在于第二个数组中。这些阵列的长度不同,可能的顺序不同。如有必要,我想我可以对它们进行排序......
我知道我可以一起破解这个,但我认为这可能有一个相当标准和有效/“最佳”的解决方案,而且我比任何事情都好奇。
我正在使用c#,但如果您想用其他语言编写解决方案,欢迎任何帮助。
感谢您的帮助!
答案 0 :(得分:6)
如果数组很大,那么您将需要使用对这些操作有效的数据结构;数组不是。
如果数组的大小为n,那么天真的解是O(n ^ 2)。
如果您对数组进行排序,那么您可以二进制搜索它们的项目;排序可能是O(n lg n)并且每次搜索以ng n为代价进行n次搜索也将及时为O(n lg n)。
如果先将每个数组转换为HashSet<T>
,那么可以在O(n)时间和O(n)额外空间中进行。
答案 1 :(得分:2)
var onlyinfirst = from s in list1 where !list2.Contains(s) select s;
var onlyinsecond = from s in list2 where !list1.Contains(s) select s;
var onboth = from s in list1 where list2.Contains(s) select s;