Array 1 | Array 2
=================
1 | 2
2 | 3
3 | 4
5 | 5
| 6
将阵列2“同步”或组合成阵列1的好算法是什么?以下需要发生:
我最终会在Obj-C中对此进行编码,但我真的只是在寻找一种有效算法的伪代码表示来解决这个问题,所以请随意以你喜欢的任何形式提出答案
编辑:
我需要的最终结果有点难以解释而不给出背景故事。我有一个Cocoa应用程序,它有一个Core Data实体,其数据需要使用来自Web服务的数据进行更新。我不能简单地用Array 2的内容(从Web解析为数据的数据)覆盖Array 1(核心数据实体)的内容,因为Array 1与我的应用程序中的其他核心数据实体有关系。因此,基本上重要的是两个数组中包含的整数不会在数组1中被覆盖。
答案 0 :(得分:8)
Array1 = Array2.Clone()
或某些等价物可能是最简单的解决方案,除非元素的顺序很重要。
答案 1 :(得分:3)
我有点猜测,因为你的例子在空中留下了一些东西,但通常在这样的情况下我会使用一套。这是Obj-C中的一些示例代码。
NSMutableSet *set = [NSMutableSet set];
[set addObjectsFromArray:array1];
[set addObjectsFromArray:array2];
NSArray *finalArray = [[set allObjects] sortedArrayUsingSelector:@selector(compare:)];
答案 2 :(得分:2)
在我的方法中,您需要Set data structure。我希望你能在Obj-C中找到一些实现。
Set1的所有元素现在都是您的“同步”数据。
“包含”,“删除”和“添加”操作“Set”在一些好的实现(例如HashSet
)上的算法复杂性将为您提供所需的效率。
编辑:这是Set
的简单实现,假设整数在0到100的有限范围内,每个元素都初始化为0,只是为了更清楚地了解Set
首先需要定义大小为101的数组桶。然后为..
答案 3 :(得分:2)
(假设这不是一个简单的Array1 = Array2
问题,)如果对数组进行排序,那么您将看到两个数组上的单个O(n + m)传递。指向两个数组的开头,然后前进包含较小元素的指针。继续比较元素并相应地添加/删除元素。如果它们不是这样的话,那么效率可能值得对数组进行排序。
答案 4 :(得分:1)
你说:
将阵列2“同步”或组合成阵列1的好算法是什么?以下需要发生:
这里有一些文字算法可以帮助你(python):
def sync(a, b):
# a is array 1
# b is array 2
c = a + b
for el in c:
if el in b and el not in a:
a.append(el) # add to array 1
elif el in a and el not in b:
a.remove(el) # remove from array 1
# el is in both arrays, skip
return a # done
答案 5 :(得分:1)
而不是“这就是需要发生的事情”,尝试用来描述需求
“这是必要的最终条件”。从这个角度看,期望的最终状态是array1
包含与array2
完全相同的值。
如果是这种情况,那么为什么不等同于这个伪代码(除非你的环境有clone
或copy
方法)?
array1 = new int[array2.length]
for (int i in 0 .. array2.length - 1) {
array1[i] = array2[i]
}
如果订单,重复保留等问题,请更新问题,我们可以再试一次。
答案 6 :(得分:0)
好吧,如果订单无关紧要,那么你已经有了算法:
如果整数的顺序很重要,那么你想要的是决定两个字符串之间“差异”的算法的变体。 Levenshtein算法应该适合你的。
但是,我怀疑你真的想要第一部分。在那种情况下,完全是什么问题?如何在数组中找到整数?或者......什么?
答案 7 :(得分:0)
你的问题没有说明订单,如果你检查了你的三个要求,你会发现后置条件说 Array2没有改变而 Array1现在包含完全相同的整数集在Array2中。除非你没有告诉我们关于订单的要求,否则你也可以复制一下Array2。