如何在NSArray中交换值索引

Bha*_*n_m 8 iphone nsarray

我有NSArray.我在那个数组里面有一些价值.

NSArray *testArray = [NSArray arrayWithObjects:@"Test 1", @"Test 2", @"Test 3", @"Test 4", @"Test 5", nil];
NSLog(@"%@", testArray);
Run Code Online (Sandbox Code Playgroud)

结果如下:

(
"Test 1",
"Test 2",
"Test 3",
"Test 4",
"Test 5"
)
Run Code Online (Sandbox Code Playgroud)

现在我想要这样的结果:

(
"Test 3",
"Test 5",
"Test 1",
"Test 2",
"Test 4"
)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不重新初始化阵列的情况下做到这一点?我可以交换这个数组的值吗?

HDd*_*per 7

使用NSMutableArray交换两个对象.

- exchangeObjectAtIndex:withObjectAtIndex:
Run Code Online (Sandbox Code Playgroud)

这将在给定索引(idx1和idx2)处交换数组中的对象

idx1
要在索引idx2处替换对象的对象的索引.

idx2
用于替换索引idx1处对象的对象的索引.

迅速

func exchangeObjectAtIndex(_ idx1: Int,
         withObjectAtIndex idx2: Int)
Run Code Online (Sandbox Code Playgroud)

OBJECTIVE-C 使用NSMutableArray

  - (void)exchangeObjectAtIndex:(NSUInteger)idx1
                withObjectAtIndex:(NSUInteger)idx2
Run Code Online (Sandbox Code Playgroud)

交换NSMutableArray中的元素


gio*_*shc 6

您的数组必须是一个实例,NSMutableArray否则不允许写入方法(NSArray只读)

使用以下方法:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)

您将需要一个临时存储来存储替换对象:

id tempObj = [testArray objectAtIndex:index];
[testArray replaceObjectAtIndex:index withObject:[testArray objectAtIndex:otherIndex]];
[testArray replaceObjectAtIndex:otherIndex withObject:tempObj];
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`exchangeObjectAtIndex:withObjectAtIndex:`,然后您不需要临时对象. (20认同)
  • 您好@MartinR考虑过将您的评论转移到答案帖中,这实际上是可以接受的方式.谢谢你指出那个API! (2认同)