首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串(NSString)、字典(NSDictionary)、数组(NSArray)的总结

字符串(NSString)、字典(NSDictionary)、数组(NSArray)的总结

作者头像
用户1451823
发布2018-09-13 17:21:40
9750
发布2018-09-13 17:21:40
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1338191

字符串——NSString

学习字符串首先要懂得字符串的创建,创建方式也有好几种方式,NSString  * str = @"qwe";

NSString * str2 = [NSString alloc initWithString : str];

NSString * str3 = [NSString alloc initWithUTF8String:"hello world"];

NSString * str4 = [NSString alloc initWithFormat:@"hello %@", @"world"];

字符串创建好之后就要学着使用字符串,这就需要用到适用于字符串的函数。函数很多,需要在今后的使用中慢慢积累,逐渐记忆。下面举几个例子:

  1. isEqualToString:此函数用于比较两个字符串是否相等,结果只有两个,即相等、不想等,所以函数返回值的类型事布尔型:BOOL。
  2. compare:此函数同样用于字符串的比较,返回值同样是布尔型可结果却是三个即大于、小于、等于。(NSOrderedDescending、NSOrderedAscending、NSOrderedSame)。
  3. rangeOfString:后一个字符串在前一个字符串中的起始位置和长度。
  4. substringToIndex: 从头到(to)index生成一个新的字符串。(注意是左闭右开区间)。
  5. substringFromIndex:从index到最后结束生成一个新的字串。

函数还有很多,这些方法只是举例,起一个抛砖引玉的作用。

NSString是不可变字符串,所谓不可变就是字符串的长度内容是不可以改变的,不能增长、不能缩短、不能换字符。。。

字符串中除了不可变字符串还有可变字符串即NSMutableString.可变字符串的内容、长度就可以被我们任意更改了。

下面同样举一些函数,注意如果是不可变字符串这些函数是不可以用的。(就像人,同样是人,可是只有女人才可以生育,男人是不可以的。  例子不是很恰当)。

  1. appendString:在字符串后面添加字符串,变成了一个新的字符串。

2.insertString:@"www" atIndex:4:在某个位置上插入字符串。

  1. deleteCharacterInRange:删除某段字符串。
  2. replaceCharacterInRange:NSMakeRange(3,3) withString:  :用某段字符串替换掉某段字符串。

字符串之后学习的是数组——NSArray

数组的学习思路和字符串是相似的,先要创建,创建之后就是函数的使用。数组的元素可以是任何对象,但数组中装有的元素不是对象而是地址。打印数组就是打印数组的每个元素,实际就是description方法的返回值。我们都对description方法进行了重写。在数组中有一个新鲜的知识点,那就是遍历,对数组进行遍历。遍历方式常用的有三种,即1.枚举器法 2.快速枚举法 3.使用I值遍历。三种遍历方式中属快速枚举法简单。下面就介绍三种遍历方式:

  1. 枚举器法

创建枚举器:NSEnumerator * enumerator =[array objectEnumerator];

id obj;// 地址   id是一个指针

while(obj = enumerator nextObject) {

NSLog(@"%@", obj);

}

  1. 快速枚举法

for(id obj in array) {

NSLog("%@", obj);

}

  1. 使用i值遍历

NSUInteger length = array count;

NSInteger i;

for(i = 0; i < length; i ++) {

NSLog(@"%@", array objectAtIndex:i);

}

与字符串一样,数组也分可变数组和不可变数组,不可变数组即NSMutableArray。数组中的方法就不再举例了,网上的常用方法到处都是。

最后总结一些字典。

看到字典相等一般人回首先想到我们平时生活、学习中用到的字典有汉语字典有英语字典。字典是我们用来查生词的工具,大多数用过字典的人都会用它查找到我们需要的生词。字典在前面给出了后面每个生词对应的页数,让我们查起来十分方便。OC中的字典——NSDictionary作用也差不多,字典中的元素是以键值对的形势存在的,键值对就像字典中的生词和页数的关系,有着一定的对应关系。OC中的字典存储对象的地址是没有顺序的。字典同样可以像数组那样进行遍历,遍历方式也差不多。快速枚举法所遍历的是键,得到了键也就知道了值。老师说的一句话:值是我们的目的(我们要得到值),键是我们的手段(我们通过键寻找值)。

字典中同样有可变字典——NSMutableDictionary。

在字典中的很多题听不错,下面就把一个手机通讯录的题贴在下面,看懂了这道题,很多东西也就会了。

首先建立一个Person类:(要纪录人的姓名和电话号码)

//

//  Person.m

//  手机通讯录

//

//  Created by student on 15-7-12.

//  Copyright (c) 2015年 student. All rights reserved.

//

#import "Person.h"

@implementation Person

// set方法

-(void) setName:(NSString *) name{

    _name = name;

}

-(void) setPhoneNum:(NSString *) phoneNum{

_phoneNum = phoneNum;

}

// get方法

-(NSString *) name{

return _name;

}

-(NSString *) phoneNum{

return_phoneNum;

}

// 构造方法

-(Person *) initWithName:(NSString *)name withPhoneNum:(NSString *) phoneNum{

if (self = superinit) {

_name = name;

_phoneNum = phoneNum;

    }

return self;

}

// 显示信息

-(void) showInfors{

NSLog(@"姓名:%@  手机号:%@", _name,_phoneNum);

}

@end

其次再建立一个Manager类对Person进行管理,即对通讯录进行操作(如:增、删、改、查)。

//

//  Manager.m

//  手机通讯录

//

//  Created by student on 15-7-12.

//  Copyright (c) 2015年 student. All rights reserved.

//

#import "Manager.h"

#import "Person.h"

@implementation Manager

// 构造方法

-(Manager *) init{

if (self = superinit) {

_dataArr = [NSMutableArrayalloc init];

_dataDict = [NSMutableDictionaryalloc init];

    }

return self;

}

// 添加联系人

-(void) addPersonWithName:(NSString *) name withPhoneNum:(NSString *) phoneNum{

Person * person = [Personalloc initWithName:namewithPhoneNum:phoneNum];

    _dataDict setObject:personforKey:name; // name是键

    _dataArr addObject:person;

}

// 删除联系人

-(void) detePersonWithName:(NSString *) name{

Person * person = _dataDictobjectForKey:name;

      _dataArr removeObject:person;

    _dataDictremoveObjectForKey:name;

}

// 修改联系人电话

-(void) modifyPhoneNumByName:(NSString *) name withNewPhoneNum:(NSString *) phoneNum{

Person * person = _dataDictobjectForKey:name;

    person setPhoneNum:phoneNum;  // person中的set方法

}

// 查找联系人

-(void) searchPersonWithName:(NSString *) name{

Person * person = _dataDict objectForKey:name;

if (person) {

        person showInfors;

    } else {

NSLog(@"There is no this one! :%@", name);

    }

}

// 排序(按姓名)

-(void) sortPersonByName{

for (NSUInteger i =0; i < _dataArrcount - 1; i ++) {

for (NSUInteger j = i +1; j < _dataArrcount; j ++) {

Person * person1 = _dataArrobjectAtIndex:i  ;

Person * person2 = _dataArrobjectAtIndex:j;

if ([person1 name compare:person2 name] == NSOrderedDescending) {

                _dataArrexchangeObjectAtIndex:i withObjectAtIndex:j;

            }

        }

    }

}

// 显示信息

-(void) showAllInfors{

for (Person * personin _dataArr) {

        person showInfors;

    }

}

@end

最后写主函数:

//

//  main.m

//  手机通讯录

//

//  Created by student on 15-7-12.

//  Copyright (c) 2015年 student. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Manager.h"

int main(int argc,const char * argv[])

{

@autoreleasepool {

// 创建manager对象

Manager * manager = [Manageralloc init];

// 添加联系人信息

        manager addPersonWithName:@"peng fei"withPhoneNum:@"123456";

        manager addPersonWithName:@"meng zhen"withPhoneNum:@"23456";

        manager addPersonWithName:@"yu yang"withPhoneNum:@"12378";

        manager addPersonWithName:@"liang sen"withPhoneNum:@"23456789";

// 显示信息

        manager showAllInfors;

// 删除联系人

        manager detePersonWithName:@"meng zhen";

NSLog(@"删除后");

        manager showAllInfors;

// 修改联系人电话

        manager modifyPhoneNumByName:@"peng fei"withNewPhoneNum:@"345678";

NSLog(@"修改后");

        manager showAllInfors;

// 查找联系人

NSLog(@" 查找到的信息:");

        manager searchPersonWithName:@"peng fei";

        manager searchPersonWithName:@"pen fei";

// 排序(按姓名)

        manager sortPersonByName;

NSLog(@"排序后");

        manager showAllInfors;

    }

return 0;

}

上面的代码给的都是实现部分,声明部分没给,可以根据实现部分轻松得到声明部分。

字符串、字典、数组的总结就到这里,今后可千万别再误课了,感觉补课好累,而且补完了心里也没底,感觉没听老师讲课很多东西都误了。下个礼拜加倍努力地去学习,加油!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年07月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档