美文网首页
Object-C array dictionary string

Object-C array dictionary string

作者: ghost__ | 来源:发表于2018-04-02 21:17 被阅读25次

数据类型一:array

有序元素的集合。元素必须由对象组成,不能包含基本数据类型。

1.不可变数据 NSArray
创建:NSArray *array = @[@1,@1,@2];
#1.取元素
NSString *str = array[0]; 
NSString *str =[array objectAtIndex:0];

#2.添加元素 不可变数组没法在原有基础上添加新的元素  
如果要较真 那可以这样
array = [array arrayByAddingObject:@"176"];
或者:
array = [array arrayByAddingObjectsFromArray:@[@18,@19]];
这两种方式看起来好像是添加了新的元素
实际上是创建了一个新的数组  让array指向了一个新的内存空间 释放了原指向空间

#3.将各元素拼接成字符串
NSString *str = [array componentsJoinedByString:@"/"];

#4.判断是否包含指定元素
[array containsObject:@1]

#5.判断两个数组是否一样
[array isEqualToArray:[NSArray array]]; //这里判断的是两个数组的值是否相等 而非引用(即地址)

#6.取数组的第一个元素与最后一个元素
arrar.firstObject
arrar.lastObject

#7.排序
方式1:array = [array sortedArrayUsingSelector:@selector(compare:)];//返回新数组   升序 按照ASCII比较
方式2:
array = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        NSComparisonResult result = [obj1 compare:obj2];
        //obj1 compare obj2 是正序排列
        //obj2 compare obj1 是倒序排列
        return result;
    }];
有一点注意的东西  这种单纯的比较数据类型提前处理好 统一
方式3:描述法排序  这种比较适合对自定义对象的比较 多条件比较 由第一描述开始判断 如果有结果则直接返回结果  如果相等则继续判断第二描述  依次类推
对象:
Penson *p = [Penson new];
p.age = 27;p.workyear = 3;
NSArray *pensons = @[p,p,p,p];
//描述条件一 NO 降序
NSSortDescriptor *age = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
//描述挑那间二 YES 升序
NSSortDescriptor *workyear = [NSSortDescriptor sortDescriptorWithKey:@"workYear" ascending:YES];
//采取哪些描述进行排序 得到最后结果
pensons = [self.pensons sortedArrayUsingDescriptors:@[age, workyear]];

#8.遍历
for (int i = 0; i < 10;i ++) {}
for (id value in array) { }
[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {  }];

#9.让数组中每一个元素都执行一遍方法
 [arr makeObjectsPerformSelector:@selector(function)];//function是元素对象有的方法
 [arr makeObjectsPerformSelector:@selector(function:) withObject:@100];//function:是元素对象有的方法 withObject:传递的参数
例:[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
#注意点:不可变数组 无法修改元素值与删除元素 严格意义也无法添加新元素
2.可变数组 NSMutableArray
上面的不可变数组的使用方法 可变数组都可以使用
创建:NSMutableArray *array = [NSMutableArray array];
#1.添加元素
[array addObject:@13];
[array addObjectsFromArray:@[@14,@19,@20]];

#2.改变元素的值 replace.....
array[0] = @"newAdd";//直接赋值
[array replaceObjectAtIndex:0 withObject:@190];//根据指定下标
[array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@1000,@2000]];//根据指定range
[array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@"message",@"test",@"value"] range:NSMakeRange(1, 2)];//根据指定range 

#3.删除 remove.....
[array removeObject:@19];//移除指定元素
[array removeObjectAtIndex:0]; //移除指定下标
[array removeAllObjects];//移除全部元素

数据类型二:字典 dictionary

使用 hash表来实现key和value之间的映射和存储 字典是无序的

1.不可变字典 NSDictionary
创建:NSDictionary *dict = @{@"key":@"value"};
#1.取值
dict[@"key"];
[dict objectForKey:@"key"];

#2.获取所有key  所有value
dict.allKeys dict.allValues  
//可以通过获取的keys  values  判断是否包含某个元素  并且将value拼接成字符串  key拼接成字符串

#3.字典比较
[dict isEqualToDictionary:[NSDictionary new]];//值比较

#4.遍历
[dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {    }];//常用方式

#5.排序
无序  下面是一个思路 可以按照一定规律 转换成其它类型
-  (NSString *)stringWithDict:(NSDictionary *)dict{
    NSArray *sortedArray = [dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2) {
        return[obj1 compare:obj2 options:NSNumericSearch];//正序
    }];
    
    NSString *str =@"";
    for(NSString*categoryId in sortedArray) {
        id value = [dict objectForKey:categoryId];
        
        if([value isKindOfClass:[NSDictionary class]]) {
            value = [self stringWithDict:value];
        }
        
        if([str length] !=0) {
            str = [str stringByAppendingString:@","];
        }
        str = [str stringByAppendingFormat:@"%@:%@",categoryId,value];
    }
    NSLog(@"str:%@",str);
    return str;
}
2.可变字典 NSMutableDictionary
上面的不可变字典的使用方法 可变字典都可以使用
创建:NSMutableDictionary *nmDict = [NSMutableDictionary dictionary];
#1.添加元素
[nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加
[nmDict addEntriesFromDictionary:@{@"key2":@"value2"}];

#2.改变元素的值
nmDict[@"key1"] = @"message";//重新赋值
[nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加

#3.删除 remove.....
[nmDict removeObjectForKey:@"key1"];//移除指定key
 [nmDict removeAllObjects];//移除所有

数据类型三:string

1.不可变字符串 NSString
创建:NSString *str = @"message";
#1.获取字符串指定下标字符
//方式一
unichar s = [str characterAtIndex:1];
NSString *newcharStr = [NSString stringWithFormat:@"%C",ch];//将unichar转化为string
//方式二 
[str substringWithRange:NSMakeRange(0, 1)];//获取下标为0的字符

#2.字符串截取
[str substringToIndex:2]//从开始截取2位
[str substringFromIndex:4]//从下标为4的位置 截取到最后
[str substringWithRange:NSMakeRange(0, 1)]//截取指定区域字符串

#3.字符串的比较
//严格模式
NSComparisonResult result = [str compare:@"aaa"];

//options 怎么比 这里选的不区分大小写
NSComparisonResult result = [str compare:@"aaa" options:NSCaseInsensitiveSearch];
/**
NSComparisonResult:
NSOrderedAscending//后面比前面小
 NSOrderedSame//一样大
 NSOrderedDescending//后面比前面大
*/

[str isEqualToString:@"aaa"];//比较值是否相等 区分大小写

#4.判断字符串是否包含指定字符窜
[str hasPrefix:@"m"] //头部是否包含
[str hasSuffix:@"e"] //尾部是否包含
[containsString:@"ss"]//不分位置 包含则返回YES  ios8later

#5.获取指定字符串  在原字符串中位置
NSRange range = [rangeOfString:@"me"];
NSRange range = [rangeOfString:@"me" options: NSCaseInsensitiveSearch];//options 怎么比 这里选的不区分大小写

#6.拼接字符串
[str stringByAppendingString:@"newString"];
[str stringByAppendingFormat:@"%@", @"newString"]; 

#7.基础类型转换
@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) long long longLongValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
@property (readonly) BOOL boolValue

#8.大小写
@property (readonly, copy) NSString *uppercaseString;//全部大写
@property (readonly, copy) NSString *lowercaseString;//全部小写
@property (readonly, copy) NSString *capitalizedString;//首字母大写

#9.空格与换行符
//去掉所有空格与换行
  str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];  
    str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@""];  
    str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];  

//去掉首位空格
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

//去掉首位空格与换行
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet ]];

#10.字符串切割成数组
  NSArray *array = [str componentsSeparatedByString:@","];// 以,为分隔符进行切割

2.可变字符串

创建:NSMutableString *str = [NSMutableString string];
#1.添加字符串
[str appendString:@"message"];
[str appendFormat:@" %@",@"new"];
[str insertString:@"aString" atIndex:3];//插入字符串到指定位置

#2.替换字符
[str replaceCharactersInRange:NSMakeRange(0, 3) withString:@"MES"];//替换指定区域
[str replaceOccurrencesOfString:@"AGE" withString:@"AGE" options:NSCaseInsensitiveSearch range:NSMakeRange(0, str.length)];//在全区域内搜寻 替换指点字符串 不区分大小写

#3.删除
[str deleteCharactersInRange:NSMakeRange(0,2)];

相关文章

网友评论

      本文标题:Object-C array dictionary string

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