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

iOS 合併兩個陣列並去重:使用 NSMutableOrderedSet 實現有序唯一集合

     編輯:程式設計綜合問答

需求描述

給定兩個陣列:first = [1,2,3,4,5,6]、second = [2,4,6,8,0,12]。期望合併後保持首次出現順序並去重,結果為 [1,2,3,4,5,6,8,0,12]。

最佳方案:NSMutableOrderedSet

NSOrderedSet / NSMutableOrderedSet 同時保證「有序」與「唯一」,完美契合此場景:

NSMutableOrderedSet *firstSet = [NSMutableOrderedSet orderedSetWithArray:@[@1, @2, @3, @4, @5, @6]];
NSOrderedSet *secondSet = [NSOrderedSet orderedSetWithArray:@[@2, @4, @6, @8, @0, @12]];

[firstSet unionOrderedSet:secondSet]; // 就地合併,保持 first 順序,補充 second 中不重複元素

NSArray *result = [firstSet array]; // 轉回 NSArray
NSLog(@"%@", result); // (1, 2, 3, 4, 5, 6, 8, 0, 12)

替代方案對比

方法有序唯一複雜度適用場景
NSMutableOrderedSet✅✅O(n)首選,語義清晰
NSSet + 排序❌✅O(n log n)不需保持順序
遍歷檢查 containsObject✅✅O(n²)極小數據量
NSDictionary 以值為鍵❌✅O(n)需快速查找

Swift 版本實現

var first = [1, 2, 3, 4, 5, 6]
let second = [2, 4, 6, 8, 0, 12]
var seen = Set(first)
for num in second where !seen.contains(num) {
    first.append(num)
    seen.insert(num)
}
// first = [1, 2, 3, 4, 5, 6, 8, 0, 12]

總結

Objective-C 直接使用 NSMutableOrderedSet.unionOrderedSet: 一行解決,既高效又語義明確;Swift 則用 Set 輔助去重並保持順序。避免手寫雙重循環,提升代碼可讀性與效能。

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