aks*_*h1t 7 objective-c nsmutablearray nsarray ios
我有一个NSMutableArray oldArray.现在,在某一点上,这个NSMutableArray对象会被另一个对象更新,这个对象NSMutableArray可能具有比前一个更多,更少或相同数量的元素NSMutableArray.
我想比较旧数组和新数组的变化.我想有两个NSArray小号addedArray和removedArray其中将包含已添加和/或删除旧的数组中的元素的索引.
通过一个例子,整个问题将更加清晰:
oldArray = {@"a",@"b",@"d",@"e",@"g"};
newArray = {@"a",@"c",@"d",@"e",@"f",@"h"};
Run Code Online (Sandbox Code Playgroud)
因此,这里删除的对象分别是索引1和4处的@"b"和@"g".并且在索引1,4和5处添加的对象是@"c",@"f"和@"h"(删除第一个对象,然后添加).
因此,
removedArray = {1,4}; and addedArray = {1,4,5};
Run Code Online (Sandbox Code Playgroud)
我想要一种有效的方法来获得这两个数组 - removedArray以及addedArray来自旧的和新的NSMutableArray.谢谢!如果问题不是很容易理解,我愿意提供更多信息.
编辑1
如果我解释一下我想要用什么,也许会更清楚.
实际上我正在使用的是在加载tableview之后使用方法insertRowsAtIndexPaths和removeRowsAtIndexPaths动画更新UITableView ,以便用户可以看到删除的行熄灭并且新行进入.tableview存储用户可以使用的收藏夹元素添加或删除.添加一些收藏夹后删除一些; 当用户返回收藏夹表视图时,将显示动画.
编辑2
本来应该提到过这个,但是旧数组和新数组中的元素都是按升序排列的.只有删除或添加的指标才有意义.订单无法更改.恩.{@"b",@"a",@"c",@"d"}不能是数组.
我已经尝试使用循环和条件迭代旧的和新的数组,但它是否变得非常混乱和错误.
这不是一个简单的问题.首先,请注意它可能有多个解决方案:
a b c d
b c d e
Run Code Online (Sandbox Code Playgroud)
既(a={0, 1, 2, 3}, r={0, 1, 2, 3})和(a={3}, r={0})有效的解决方案.你可能正在寻找的是一个最小的解决方案.
获得最小解决方案的一种方法是找到两个序列的最长公共子序列(LCS).用于查找LCS的算法将告诉您哪两个序列的元素属于LCS,哪些不属于LCS.原始数组中不在LCS中的每个元素的索引都进入removed数组; 不在LCS中的新数组元素的索引进入added数组.
以下是一些示例(我将LCS的元素括起来):
0 1 2 3 4 5
(a) b (d) (e) g
(a) c (d) (e) f h
Run Code Online (Sandbox Code Playgroud)
old不在LCS中的项目是1和4; new不在LCS中的项目是1,4和5.
这是另一个例子:
0 1 2 3
a (b) (c) (d)
(b) (c) (d) e
Run Code Online (Sandbox Code Playgroud)
现在added是3和removed是0.
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |