如何对NSMutableArray进行切片

21

我有一个NSMutableArray,只需要其中的[0:5]个对象。有没有简单的方法来切片?我是否可以删除索引之后的所有对象?我能否将子数组复制到另一个NSMutableArray中?


3
谢谢大家,我在查看NSMutableArray的文档时没有发现这些内容。 - user317033
2个回答

63
- (NSArray *)subarrayWithRange:(NSRange)range 是一个实例方法,用于获取数组的子集。
例如:
NSArray* slicedArray = [wholeArray subarrayWithRange:NSMakeRange(0, 5)];

14
请注意,NSMakeRange(0,5)并不意味着“切片位置从0到5”,它的意思是“从0开始,每次增加5个位置进行切片”。这与0:5没有区别,但如果您使用1:5,则这个区别就变得重要了。 - Rik Smith-Unna
4
是的,使用NSMakeRange(1, 5)表示slicedArray将包含wholeArray中从索引1到6的对象。 - James Bedford
2
为避免少于5个元素的NSRangeException,您应该使用:[wholeArray subarrayWithRange:NSMakeRange(0, MAX(wholeArray.count, 5))] - Szu
2
@Szu,我认为你会发现我们需要使用MIN而不是MAX来防止崩溃 :) - Max Chuquimia
@JamesBedford: 实际上,slicedArray 包含的是 wholeArray 中索引为 1 到 5 的对象,而不是 1 到 6。 - xZenon

15

我看到 James Bedford 已经回答了如何提取一系列索引的方法。如果要从 NSMutableArray 中删除一系列对象,可以使用 [wholeArray removeObjectsInRange:...]。如果要删除特定索引后的所有对象,则可以创建一个适当的范围,如 NSMakeRange(index, wholeArray.count - index)


1
简洁、简单且有帮助。感谢您的回答。 - mattsven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接