集合(Set NSArray)

        OC集合类型

        1.数组

        2.字典

        3.集合        

        NSArray, 不可变数组类, 用于存放一组有序的对象, 继承于NSObject

        : 数组中的元素必须是对象  

        创建数组对象

NSArray *array1 = [[NSArray alloc]initWithObjects:@"liudehua", @"zhangxueyou", @"guofucheng", @"liming", nil];

        : 元素之间用逗号隔开, 最后以nil结束

        NSLog(@"%@", array1);//打印对象使用%@
        NSArray *array2 = [NSArray arrayWithObjects:@"xiaoshengyang", @"songxiaobao", @"zhaosi", @"liuneng", nil];
        NSLog(@"%@", array2);

数组的元素个数

  NSUInteger count = [array2 count]; NSLog(@"%lu", count);

获取数组的某个元素

  NSString *name = [array2 objectAtIndex:3]; NSLog(@"%@", name);

获取数组的最后一个元素

NSString *lastObject = [array2 lastObject];
        NSLog(@"%@", lastObject);

获取数组的第一个元素

NSString *firstObject = [array2 firstObject];
        NSLog(@"%@", firstObject);

遍历数组的每一个元素, 输出每一个元素的值

for (NSInteger i = 0; i < [array2 count]; i++) {
            NSLog(@"%@", [array2 objectAtIndex:i]);
        }

NSMutableArray, 可变数组类, 继承于NSArray

NSMutableArray *mArray = [[NSMutableArray alloc]initWithCapacity:0];
        NSLog(@"%@", mArray);

添加元素

[mArray addObject:@"iPhone"];
        [mArray addObject:@"iPad"];
        [mArray addObject:@"Apple Watch"];
        NSLog(@"%@", mArray);

: 添加到数组的最后

插入元素

[mArray insertObject:@"iMac" atIndex:1];
        NSLog(@"%@", mArray);

添加多个元素

 NSArray *tempArray = [NSArray arrayWithObjects:@"iPhoto", @"iWork", @"iTunes", @"iBooks",nil];
        [mArray addObjectsFromArray:tempArray];
        NSLog(@"%@", mArray);

: 数组元素必须是对象, 但是对象的数据局类型可以不相同

NSMutableArray *mArray2 = [NSMutableArray arrayWithObjects:@"A程序员", @"B程序媛", @"C设计狮", @"D产品狗", @"E运营鼠", @"F销售猴", @"G总经狸", nil];
        NSLog(@"%@", mArray2);

移除某个元素

       [mArray2 removeObjectAtIndex:1];
        NSLog(@"%@", mArray2);

交换两个元素

[mArray2 exchangeObjectAtIndex:2 withObjectAtIndex:5];
        NSLog(@"%@", mArray2);

替换某个元素

[mArray2 replaceObjectAtIndex:0 withObject:@"H工程狮"];
        NSLog(@"%@", mArray2);

移除所有元素

        [mArray2 removeAllObjects];
        NSLog(@"%@", mArray2);

冒泡排序

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"iOS", @"Android", @"window phone", @"symbian", @"blackberry", nil];
        NSLog(@"比较前:");
        for (NSInteger i = 0; i < [array count]; i++) {
            NSString *a = [array objectAtIndex:i];
            NSLog(@"%@", a);
        }

         for (NSInteger i = 0; i < [array count] - 1; i++) {
             for (NSInteger j = 0; j < [array count] - 1 - i; j++) {
                 if ([[array objectAtIndex:j]compare:[array objectAtIndex:j + 1]] == NSOrderedDescending) {
                     [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];//交换元素
                 }
             }
         }

        NSLog(@"\n比较后:");
        for (NSInteger i = 0; i < [array count]; i++) {
            NSString *a = [array objectAtIndex:i];
            NSLog(@"%@", a);
        }

        for...in快速枚举

        不需要关心下标和循环次数, 内部自动做处理

        每一次循环, 把当前数组中的元素赋值给string

for (NSString *string in array) {
            NSLog(@"%@", string);
        }

        数组的排序方法

 OC中对数组进行排序, 只要给相邻两个元素的比较方法, 就会自动对数组进行排序, 并把排序的数组返回来

NSArray *sortArray = [array     sortedArrayUsingSelector:@selector(compare:)];//caseInsensitiveCompare:
        NSLog(@"%@", sortArray);

把基本的数据类型转化为对象

       int num1 = 1;
        float num2 = 10.10;
        double num3 = 20.123;

        常用的方式

        1.基本数据类型 -> NSString

        NSString *str1 = [NSString stringWithFormat:@"%d", num1];
        NSString *str2 = [NSString stringWithFormat:@"%f", num2];
        NSString *str3 = [NSString stringWithFormat:@"%lf", num3];
//      NSLog(@"%@ %@ %@", str1, str2, str3);
NSArray *numberArray = [NSArray arrayWithObjects:str1, str2, str3, nil];
        NSLog(@"%@", numberArray);

        int num4 = [[numberArray objectAtIndex:0] intValue];
        float num5 = [[numberArray objectAtIndex:1] floatValue];//转化为浮点类型
        double num6 = [[numberArray objectAtIndex:2] doubleValue];
        NSLog(@"%d %f %lf", num4, num5, num6);

        2.基本数据类型 -> NSNumber

        NSNumber, 数值类, 把基本的数据类型(int, short, char, long, float, double, BOOL)转换成NSNumber的对象, 或者把NSNumber的对象转换成基本数据类型, 继承于NSValue

 

//int -> number
        NSNumber *intNumber = [NSNumber numberWithInt:10];

        //float -> number
        NSNumber *floatNumber = [NSNumber numberWithFloat:3.14];

        //BOOl -> number
        NSNumber *boolNumber = [NSNumber numberWithBool:YES];
        NSArray *numberArray1 = [NSArray arrayWithObjects:intNumber, floatNumber, boolNumber, nil];
        NSLog(@"%@", numberArray1);

        //number -> int
        int num7 = [intNumber intValue];

        //number -> float
        float num8 = [floatNumber floatValue];

        //number -> BOOL
        BOOL num9 = [boolNumber boolValue];
        NSLog(@"%d %f %d", num7, num8, num9);

        字典

        NSDictionary, 不可变字典类, 继承于NSObject, 字典中存放的数据以键值对(key-value)形式存在, key值是唯一的, 不能重复  

        创建字典对象

NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"xiaoming", @"name", @"male", @"gender", @"18", @"age", nil];
        NSLog(@"%@", dic1);

        : 1.字典是无序的

            2.value在前, key在后

            3.nil结尾        

   如何获取value?

   通过key值获取value

NSString *nameString = [dic1 objectForKey:@"name"];
        NSLog(@"%@", nameString);
        NSString *genderString = [dic1 objectForKey:@"gender"];
        NSLog(@"%@", genderString);
        NSString *ageString = [dic1 objectForKey:@"age"];
        NSLog(@"%@", ageString);

  获取所有的value

        NSArray *values = [dic1 allValues];
        NSLog(@"%@", values);

获取所有的key

NSLog(@"%@", [dic1 allKeys]);

求字典的键值对个数

NSLog(@"%lu", [dic1 count]);

遍历字典的键值对, 输出valuekey

      //1
        for (NSInteger i = 0; i < [[dic1 allKeys] count]; i++) {
            NSString *key = [[dic1 allKeys] objectAtIndex:i];
            NSString *value = [dic1 objectForKey:key];
            NSLog(@"%@ - %@", key, value);
        }

        //2
        for (NSString *key in [dic1 allKeys]) {
            NSLog(@"%@ - %@", key, [dic1 objectForKey:key]);
        }

        //3 for...in对字典使用, 遍历的是key值
        for (NSString *string in dic1) {
            NSLog(@"%@ - %@", string, [dic1 objectForKey:string]);
        }

NSMutableDictionary, 可变字典类, 继承于NSDictionary

 NSMutableDictionary *mDic = [[NSMutableDictionary alloc]initWithCapacity:0];
        NSLog(@"%@", mDic);

添加键值对(key值不存在)

        [mDic setObject:@"bianda" forKey:@"dawa"];
        [mDic setObject:@"qianliyan" forKey:@"erwa"];
        [mDic setObject:@"daoqiangburu" forKey:@"sanwa"];
        NSLog(@"%@", mDic);

修改键值对(key值已存在)

        [mDic setObject:@"lidawuqiong" forKey:@"dawa"];
        NSLog(@"%@", mDic);

删除键值对

       [mDic removeObjectForKey:@"sanwa"];
        NSLog(@"%@", mDic);

删除所有

        [mDic removeAllObjects];
        NSLog(@"%@", mDic);

集合

        NSSet, 不可变集合, 集合内的元素都是无序的, 元素唯一, 继承于NSObject

NSSet *set = [[NSSet alloc] initWithObjects:@"1", @"2", @"3", nil];
        NSLog(@"%@", set);

获取集合元素个数

 NSLog(@"%lu", [set count]); 

访问集合中的元素

 NSLog(@"%@", [set anyObject]); 

访问集合中所有的元素

 NSLog(@"%@", [set allObjects]);

将数组重复值取消

NSArray *arr = [NSArray arrayWithObjects:@"1", @"1", @"2", @"2", @"3", @"3", nil];
        NSLog(@"%@", arr);

        NSSet *set1 = [NSSet setWithArray:arr];
        NSLog(@"%@", [set1 allObjects]);//数组输出

        NSSet *set11 = [NSSet setWithObjects:@"2", @"3", nil];
        NSSet *set12 = [NSSet setWithObjects:@"4", @"2", @"3", nil];

判断集合是否包含另外一个集合

if ([set11 isSubsetOfSet:set12]) {
            NSLog(@"是子集合");
        }

        //相交
        if ([set11 intersectsSet:set12]) {
            NSLog(@"相交");
        }

        //相等
        if ([set11 isEqualToSet:set12]) {
            NSLog(@"相等");
        }

NSMutableSet, 可变集合, 继承于NSSet

 NSMutableSet *mSet = [[NSMutableSet alloc] initWithCapacity:0];
        NSLog(@"%@", mSet);

添加元素

        [mSet addObject:@"123"];
        [mSet addObject:@"321"];
        [mSet addObject:@"567"];
        NSLog(@"%@", mSet);

删除元素

       [mSet removeObject:@"567"];
        NSLog(@"%@", mSet);

删除所有元素

       [mSet removeAllObjects];
        NSLog(@"%@", mSet);   
数组

         1.有序的

        2.元素是对象

        3.元素不唯一

        4.通过下标访问数组的某个元素

        5.(元素1, 元素2, 元素3, ...)      

   字典

        1.无序的

        2.键值对

        3.key值唯一, value值不唯一

        4.通过key值访问对应的value

        5.{key1 = value1; key2 = value2; key3 = value3; ...}分号隔开   

  集合

        1.无序的

        2.元素必须是对象

        3.元素唯一

        4.随机访问元素

        5.{(元素1, 元素2, 元素3, ...)}

   基本数据类型 <-> 对象

        1.NSString

        2.NSNumber

 

 

 

时间: 2024-10-03 20:44:33

集合(Set NSArray)的相关文章

Objective-C集合初识

NSArray 有序的 自然顺序 NSSet 无序的 NSSet 中不能存储重复的数据,可以用它来去除重复的数据 1.创建集合 1.1创建不可变集合 1 NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three", nil]; 2 NSLog(@"%@",set); 3 4 NSSet * set1 = [[NSSet alloc] initWithO

[Objective-C] 008_Foundation框架之NSArray与NSMutableArray

在Cocoa Foundation中NSArray和NSMutableArray 用于对象有序集合,NSArray和NSMutableArray类最大的区别是:NSArray是不可变,NSMutableArray是可变的.它们只能存储Cocoa对象(NSObject对象),如果想保存一些原始的C数据(如:int,float,double,BOOL等),则需要将这些原始的C数据封装NSNumber类型,它们的下标是从0开始,下面是NSArray和NSMutableArray类的一些常用初级操作.

NSSet -- 集合&amp;&amp;NSMutableSet -- 可变集合

// // main.m // OC05-task-03 // // Created by Xin the Great on 15-1-25. // Copyright (c) 2015年 Xin the Great. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here.

遍历字典数组集合

1 NSArray *cityArray = [NSArray arrayWithObjects:@"中国北京",@"中国郑州",@"中国洛阳",@"中国杭州",@"中国香港",@"中国台湾", nil]; 2 NSDictionary *personInforDic = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan

Fouandation(NSString ,NSArray,NSDictionary,NSSet) 中常见的理解错误区

Fouandation 中常见的理解错误区 1.NSString //快速创建(实例和类方法) 存放的地址是 常量区 NSString * string1 = [NSString alloc]initWithString:@“123”]; NSString * string3 = [NSString stringWithString:@“123”]; //格式化方法创建   存放地址是堆区 NSString * string2 = [NSString alloc]initWithFormat:@

【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词

一. 字符串 API 1. NSString 用法简介 (1) NSString API 介绍 NSString 功能 : -- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 String 开头的方法; // init 开头方法创建字符串 unichar data[5] = {97, 98, 99, 100, 101}; NSString * str = [[NSString alloc] initWithCharacters : data length : 5]; // str

IOS数组NSArray与NSMutableArray知识点

此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:Foundation中数组(NSArray)是有序的对象集合 b:NSArray只能存储Objective-C的对象,而不能存储像int.float这些基本数据类型,但是Objective-C对C兼容,所以在Objective-C程序中,仍然可以使用C的数组来存储基本数据类型 c:NSArray一旦创建便不可以再对

OC之集合

几种常见的集合: NSArray/NSMutableArray NSSet/NSMutableSet NSDictionary/NSMutableDictionary 1. 不可变有序数组: void Array() { // 创建 // 快速创建的方法只适于创建不可变数组 NSArray *s = @[@"jack", @"rose", @"jerry"]; //数组对象的访问 NSLog(@"%@", s[0]); //

Objective-C的基础语法总结

1.NSLog(@“hello world!”);//打印语句的函数,需要打印的字符串放在@之后. NSLog(@“are %d and %d different?%@”,4,4,@”YES”); 2.方括号有两个作用: 1)访问数组元素 2)用于通知某个对象执行什么,在方括号内第一项是对象,其余部分是需要对象执行的操作.例如,[shape draw]的含义为通知shape执行draw方法. 3.方法调用:类名 方法名:参数 注意:如果方法使用参数,则需要冒号:否则不需要冒号. 4.类的编写: