`
muyu114
  • 浏览: 134861 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

NSMutableArray,NSArray与NSSet

 
阅读更多

NSMutableArray,NSArray

NSArray and its subclass NSMutableArray manage collections of objects called arrays. NSArray creates static arrays, and NSMutableArray creates dynamic arrays.

NSMutableArray是NSArray的子类,NSArray建立静态数组,而NSMutableArray则是动态数组.换句话说,NSArray建立之后不可修改,而NSMutableArray则可以修改.
由于在ObjC中,简单的看下函数addObject,会发现数组的元素是id类型,也就是说是指针.

- (void)addObject:(id)anObject

如此一来数组里就不能压入NSUInteger,BOOL之类的非指针型数据了,要命吧..
那要压入这些内容怎么办呢?对,类型转换,ObjC提供了NSNumber来给大家转换用,NSNumber本身是个指针类型变量.
Inherits from NSValue : NSObject
来个简单的转换例子:

NSUInteger count = 1;
NSNumber *j = [NSNumber numberWithInt:count];
[ary addObject:j];

还算明了吧,就是用到这个值的时候又要转换一次,...
昨天刚好又用到数组的乱序,在网上找了个Sample修改了下,代码如下:

#pragma mark -
#pragma mark (NSMutableArray *)randArray:(NSMutableArray *)ary
- (NSMutableArray *)randArray:(NSMutableArray *)ary{
	NSMutableArray *tmpAry = [NSMutableArray arrayWithArray:ary];
	NSUInteger count = [ary count];
	for (NSUInteger i = 0; i < count; ++i) {
		int nElements = count - i;
		// Seed the random number generator
		srandom(time(NULL));
		int n = (random() % nElements) + i;
		[tmpAry exchangeObjectAtIndex:i withObjectAtIndex:n];
	}
	return tmpAry;
}

我不知道为什么每次random()每次的值都是一样的,非得在random()前要加个srandom(time(NULL))才能让编译器每次运行时有可能random()出不同的值.
看网上介绍是让编译器生成一个新的随机数种子....

NSArray与NSSet

NSArray:有序的集合,存储的元素在一个整块的内存中并按序排列;
NSSet:无序的集合,散列存储。
读developer.apple关于NSSet的解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.
就是说,如果搜索一个元素,NSSet的效率会比NSArray高。为什么呢?道理比较简单:hash!NSSet中元素的存储和访问都是一个hash的过程。比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则需要一个一个元素比较,显然效率没了。

分享到:
评论

相关推荐

    NSArray,NSSet,NSDictionary超详细用法说明

    NSArray和NSSet通常比NSMutableArray和NSMutableSet更高效,因为它们是线程安全的,适合多线程环境。而当涉及到查找操作时,NSDictionary通常比NSArray和NSSet更快,因为它可以通过键进行O(1)的复杂度查找。 在使用...

    NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍

    这些类包括NSArray、NSSet、NSEnumerator和NSDictionary,以及它们的可变版本NSMutableArray、NSMutableSet和NSMutableDictionary。这些类提供了各种操作来处理对象的集合,如添加、删除、查找等。以下是关于这些类...

    IOS 开发之 NSMutableArray与NSArray 的区别

    IOS 开发之 NSMutableArray 与 NSArray 的区别 在 IOS 开发中,NSMutableArray 和 NSArray 是两个非常重要的集合类,它们都是 Foundation 框架的一部分。在本文中,我们将详细介绍 NSMutableArray 和 NSArray 的...

    一些NSArray,NSDictionary,NSSet相关的算法知识1

    在iOS编程中,NSArray、NSDictionary和NSSet是常用的集合类,它们提供了存储和操作对象的方式。这些集合类在实际开发中扮演着重要角色,理解和优化它们的使用能够显著提高代码的性能和准确性。以下是对这些集合类...

    OC-NSArray数组的使用Demol

    NSArray可以与NSSet、NSDictionary等其他集合类相互转换。例如,将数组转换为NSSet: ```objc NSSet *set = [NSSet setWithArray:array]; ``` 八、枚举协议 NSArray实现了NSFastEnumeration协议,允许其与其他...

    OC 基础总结

    本篇文档主要总结了OC中基础的集合类型,包括数组(NSArray和NSMutableArray)以及字典(NSDictionary)和集合(NSSet)。这些知识点对于初学者来说是非常实用的。 首先,我们来关注OC中的数组。数组分为两种类型:...

    Objective-C语法之NSSet和NSMutableSet - 魏先宇的程序人生 - 博客频道 - CSDN.NET1

    Objective-C中的集合类还包括NSArray和NSMutableArray,它们分别对应于有序且不可变和有序且可变的集合。与NSSet不同,这些类允许重复的元素,但提供了线性的访问方式。数组操作通常比集合操作更容易理解和控制,...

    从Swift看Objective-C的数组使用1

    本篇文章将探讨Objective-C中的数组,特别是NSArray、NSSet和NSDictionary等集合类的内存布局,并通过对比Swift的改进来阐述如何更安全地处理数组。 首先,Objective-C中的NSMutableArray是一种可变的数组类型,它...

    NSPointerArray NSHashTable NSMapTable 详解 - jeffasd的专栏 - 博客频道 - C

    在Objective-C的Foundation框架中,除了常见的NSArray、NSSet和NSDictionary等容器类,还有一组针对内存管理策略更加灵活的类,即NSPointerArray、NSHashTable和NSMapTable。这些类在特定场景下提供了更高效、更灵活...

    iphone数组学习

    在Objective-C中,Foundation框架提供了多种用于收集Cocoa对象(即`NSObject`对象)的集合类,其中最重要的是`NSArray`、`NSSet`和`NSDictionary`。 #### NSArray: 有序集合 `NSArray`是一种用来存储对象的有序...

    Object-c字符串数组字典

    在Objective-C中,字符串被封装在NSString类中,数组由NSArray和NSMutableArray类来管理,字典则由NSDictionary和NSMutableDictionary来实现,而集合则由NSSet和NSMutableSet来表示。此外,还提供了快速枚举等便捷的...

    OC——foundation

    3. **NSSet与NSMutableSet** - NSSet:不可变集合,存储无序的唯一对象。 - NSMutableSet:可变集合,继承自NSSet,可以添加、删除元素。 4. **NSString** - NSString是不可变的字符串类,提供大量的字符串操作...

    深入剖析 iOS 性能优化 · ming1016:study Wiki1

    iOS中的集合对象,如NSArray、NSMutableArray、NSSet、NSMutableSet、NSDictionary和NSMutableDictionary,它们各自提供了不同时间复杂度的接口方法。NSArray和NSMutableArray由于维护有序性和允许重复元素,某些...

    objective-c的四种遍历方法

    Objective-C 的 fast enumeration 是一种高效的遍历方式,它支持对 NSArray、NSMutableArray、NSSet、NSOrderedSet 和 NSDictionary 的遍历。示例如下: ```objc for (NSString *fruit in array) { NSLog(@"%@",...

    ios 各种分类集合类库

    3. **NSSet与NSMutableSet**:NSSet是不允许重复元素的集合,而NSMutableSet则支持动态添加和删除元素。它们不保证元素的顺序,但提供快速查找。 4. **遍历与操作**:集合类库通常提供各种遍历方法,如`...

    黑马iOS入学面试知识点全总结

    - 数组与集合:深入学习NSArray、NSMutableArray、NSSet、NSMutableDictionary等容器类的使用。 - 字典:掌握NSDictionary、NSMutableDictionary的创建和操作,以及KVC(Key-Value Coding)和KVO(Key-Value ...

    实现待办事项列表的 Objective-C代码、建议及注意项.docx

    - **NSArray、NSSet、NSDictionary**:掌握这些集合类的使用,包括添加、删除元素等常见操作。 2. **学习Block和委托**: - **Block语法**:理解Block的概念及如何使用它们简化代码。 - **委托模式**:学习如何...

Global site tag (gtag.js) - Google Analytics