首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS NSMutableArray 截取前 N 個元素生成 NSArray:subarrayWithRange 一行搞定

     編輯:程式設計綜合問答

需求

已有包含 6 個元素的 NSMutableArray,需複製前 3 個元素生成新的 NSArray。

最佳方案:subarrayWithRange:

NSMutableArray *oldArray = @[@"A", @"B", @"C", @"D", @"E", @"F"].mutableCopy;
// 安全截取:防止數組長度不足 3
NSRange range = NSMakeRange(0, MIN(3, oldArray.count));
NSArray *newArray = [oldArray subarrayWithRange:range];
// newArray => @[@"A", @"B", @"C"]

關鍵點

  • subarrayWithRange: 返回新 NSArray(不可變),元素為淺拷貝(指針複製),不增加 retainCount。
  • NSMakeRange(location, length) 構造範圍,location 從 0 開始。
  • MIN(3, oldArray.count) 防止越界崩潰。

替代方案

1. 获取可變副本

NSMutableArray *mutableCopy = [newArray mutableCopy];
// 可繼續添加/刪除元素

2. 手動循環(不推薦)

NSMutableArray *result = [NSMutableArray array];
for (int i = 0; i < 3 && i < oldArray.count; i++) {
    [result addObject:oldArray[i]];
}

3. Swift 對應寫法

let oldArray = ["A", "B", "C", "D", "E", "F"]
let newArray = Array(oldArray.prefix(3)) // ["A", "B", "C"]

避坑指南

  • 若需深拷貝(元素也複製),需實現 NSCopying 協議並手動 copy。
  • subarrayWithRange: 範圍超出邊界會拋出 NSRangeException,務必邊界檢查。
  • NSArray 與 NSMutableArray 互轉:mutableCopy / copy。

一行 subarrayWithRange: 优雅解決數組截取,拒絕手寫循環,代碼更簡潔安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved