gpt4 book ai didi

ios - 迭代NSMutableArray时,如何删除一个对象然后插入多个对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:43 25 4
gpt4 key购买 nike

例如,如果我们有一个 NSMutableArray 实例,其中有 10 个对象。遍历的时候,我们发现要删除对象a[2]和a[8],然后在a[2]处连续插入3个对象,在a[8]处连续插入4个对象,如何在最短时间内做到这一点成本?

任何想法将不胜感激!

最佳答案

编辑:正如@trojanfoe 所指出的,很高兴补充一点,您永远不应该在迭代数组时编辑它。许多不同语言的许多集合类都是如此。不仅仅是 NSMutableArray 和 Objective-C。这样做很容易导致索引越界。


对于您的问题,让我们分两次进行。首先,我们要保存要删除的索引,因此我们将迭代 sourceArray。

NSMutableArray * indexesToRemove = [NSMutableArray array];

[sourceArray enumerateObjectsUsingBlock:^(NSNumber * obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.integerValue%2 == 1) {
// Insert at first position
[indexesToRemove insertObject:@(idx) atIndex:0];
}
}];

将索引保存在数组中而不是集合中很重要,因为您以后要插入对象。此外,在数组的开头添加新项目很重要,这样您将从最大索引到最小索引进行迭代,而不必根据之前添加的项目移动索引。

现在,您可以在新的迭代中(这次是在索引数组上)删除项目并根据您保存的索引添加新项目:

[indexesToRemove enumerateObjectsUsingBlock:^(NSNumber * obj, NSUInteger idx, BOOL * _Nonnull stop) {

NSUInteger indexToRemove = obj.unsignedIntegerValue;

// Delete the item from the source array
[sourceArray removeObjectAtIndex:indexToRemove];

// Create the items you want to insert, do whatever you want in this method :]
NSArray * itemsToAdd = [self generateElementsToAddAtIndex:indexToRemove];

// Create the indexSet according to the start index and the number of objects you want to insert
NSIndexSet * indexSet = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(indexToRemove, itemsToAdd.count)];

// Insert the objects
[sourceArray insertObjects:itemsToAdd atIndexes:indexSet];
}];

关于ios - 迭代NSMutableArray时,如何删除一个对象然后插入多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com