美文网首页
13、集合类

13、集合类

作者: HQ今日磨墨 | 来源:发表于2015-08-03 22:39 被阅读29次

集合类

  • NSArray
      在这个数组当中只能存放指向Objective 对象的指针,不能把比如整数 1 放进去(不能讲基本类型的变量或c结构加入进去)。如果一定要把数字数据放进去,就必须做一个转换,转换为NSNumber、NSValue和NSData。
    基本类型变量转为 NSNumber:
NSNumber *int1 = [NSNumber numberWithInt:1];

其中占位符 %li 代表 long int

nsarray.jpg

  上图创建了一个NSArray的对象,其中 (id),..., 表示可以在其中加入多个对象,最后有个 nil 。当系统读到 nil 之后就不会再读下去,所以在后面添加对象是没有效果的。(在开发中也会遇到这样的情况,在(id)中加入了多个对象,运行时却发现数据都没有传入进去,其中很大的可能就是传入的第一个值已经被赋予了 nil ,所以包括它本身和后面的对象都没有被存储进去

nsarray2.jpg

  由上图可以了解到, 在NSArray当中,你可以存放相同的对象,不过可以看到,它们的内存地址是相同的。

  • NSMutableArray
    例如:
NSMutableArray *mutableArray = [NSMutableArray array];
[mutableArray addObject:tempPerson];
[mutableArray addObject:int1];
[mutableArray removeObjectAtIndex:0];
[mutableArray replaceObjectAtIndex:0 withObject:tempPerson];

  提取对象(其实就是对象指针地址)的方法,前面的 id 是因为我们也许不知道提取的对象的类型是什么,所以用 id:

id object = [mutableArray objectAtIndex:0];

  当然你也可以对object的类型做一个识别,会显得更加地安全:

id object = [mutableArray objectAtIndex:0];
if ([[object class] isSubclassOfClass:[NSNumber class]]) {
      NSInteger intValue = [(NSNumber *)object integerValue];
      NSLog(@"intValue = %li", intValue);
} else if ([[object class] isSubclassOfClass:[BLPerson class]]) {
       [(BLPerson *)object sayMyInfo];
}
  • NSDictionary
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectAndKeys:tempPerson, @"person", int1, @"int", nil];
// 注意这个方法的key是写在后面的,这里使用字符串做了key,当然也可以用其他的对象型

  我们也可以对字典中的数据机型提取,下面提取了它的键值:

NSArray *allKeys = [dictionary allKeys];
for (int i = 0; i < [allKeys count]; i++) {
      NSString *key = allKeys[i];
      id object = [dictionary valueForKey:key];
      if ([[object class] isSubclassOfClass:[NSNumber class]]) {
      NSInteger intValue = [(NSNumber *)object integerValue];
      NSLog(@"intValue = %li", intValue);
      } else if ([[object class] isSubclassOfClass:[BLPerson class]]) {
       [(BLPerson *)object sayMyInfo];
      }
}
// 也可以用快速遍历法
for (NSString *key in allKeys) {
    id object = [dictionary valueForKey:key];
    if ([[object class] isSubclassOfClass:[NSNumber class]]) {
      NSInteger intValue = [(NSNumber *)object integerValue];
      NSLog(@"intValue = %li", intValue);
    } else if ([[object class] isSubclassOfClass:[BLPerson class]]) {
       [(BLPerson *)object sayMyInfo];
    }
}
  • NSMutableDictionary
    可变字典的增、删、改:
NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
[mutableDic setValue:tempPerson forKey:@"person"];
[mutableDic setValue:int1 forKey:@"int"];

[mutableDic removeObjectForKey:@"person"];

[mutableDic setValue:[NSNumber numberWithDouble:3.14] forKey:@"int"];
  • NSSet (集合)
      在NSArray当中可以放入相同的元素,但是在NSSet当中不能放入相同的元素,是无效的。

  • NSMutableSet (可变集合)

  • NSNumber

相关文章

  • 13、集合类

    集合类 NSArray  在这个数组当中只能存放指向Objective 对象的指针,不能把比如整数 1 放进去(不...

  • Java集合

    集合概述 •Java提供集合类,集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有集合类都位于jav...

  • 13 Java集合 - Collections工具类

    13.1 Collections工具类 Collections是Java提供的操作集合的工具类,可以对集合进行排序...

  • 14. 集合类

    1. Kotlin的集合类 Kotlin的集合类分为可变集合类和不可变集合类 2. 常用的三种集合类 主要有三种:...

  • Java 容器 - 一文详解HashMap

    Map 类集合 Java Map类集合,与Collections类集合存在很大不同。它是与Collection 类...

  • Python基础-13面向对象

    13 面向对象 13.1 基础概念 类:  类是具有一系列共同特征和行为的事件抽象概念集合。类所描述的概念和现实生...

  • Collection 集合类

    Collection 集合类 java.util包中提供了一些集合类,这些集合类又称为容器;集合类和数组的区别在于...

  • Java集合类-集合类图谱

    数据结构在计算机知识体系中的重要性无需赘言,Java的jdk的集合类正是学习数据结构的很好素材。如果能把jdk的集...

  • 第10章 集合类与泛型 《Kotin 编程思想·实战》

    第10章 集合类与泛型 10.1 Kotlin集合类10.1.1 不可变集合类10.1.1.1 List10.1....

  • 那些年我们追过的Java面试之集合类、异常处理

    标签:Java面试、集合类、异常处理 2017/05/09 09:36 三.Java集合类 10.Java集合类框...

网友评论

      本文标题:13、集合类

      本文链接:https://www.haomeiwen.com/subject/jkuvqttx.html