objc写一个NSMutableArray不连续索引替换对象的方法
来源:互联网 发布:java excel报表工具 编辑:程序博客网 时间:2024/05/17 03:13
NSMutableArray内置的方法-(void)replaceObjectsAtIndexes:(NSIndexSet*)set withObjects:(NSArray*)objs
只能替换一段连续索引内的对象,比如2 to 10之间的对象,如果我想要替换1,3,5索引位置的对象需要自己写代码。
在ruby中对于数组对象有一个values_at方法可以取得不连续索引的对象:
2.2.1 :048 > ary = %w[a b c d e f g] => ["a", "b", "c", "d", "e", "f", "g"] 2.2.1 :049 > ary.values_at(*[1,3,5]) => ["b", "d", "f"]
如果是替换不连续索引的对象,稍微麻烦点:
2.2.1 :053 > idxes => [1, 3, 5] 2.2.1 :054 > objs => ["X", "X", "X"] 2.2.1 :055 > idxes.zip(objs) => [[1, "X"], [3, "X"], [5, "X"]] 2.2.1 :056 > idxes.zip(objs).each {|i,v|ary[i] = v} => [[1, "X"], [3, "X"], [5, "X"]] 2.2.1 :057 > ary => ["a", "X", "c", "X", "e", "X", "g"]
如果idxes数量小于objs则忽略多余的对象,反之如果idxes数量大于objs则用nil补足:
2.2.1 :062 > objs = %w[X X X] => ["X", "X", "X"] 2.2.1 :063 > idxes = [1,6] => [1, 6] 2.2.1 :064 > idxes.zip(objs).each {|i,v|ary[i] = v} => [[1, "X"], [6, "X"]] 2.2.1 :065 > ary => ["a", "X", "c", nil, "e", nil, "X"] 2.2.1 :059 > objs = [] => [] 2.2.1 :060 > idxes.zip(objs).each {|i,v|ary[i] = v} => [[1, nil], [3, nil], [5, nil]] 2.2.1 :061 > ary => ["a", nil, "c", nil, "e", nil, "g"]
下面写一个objc中类似的实现:
#import <Foundation/Foundation.h>@interface NSMutableArray (HyRandReplace)@end@implementation NSMutableArray (HyRandReplace)-(void)replaceObjectsAtIndexesRand:(NSArray*)idxes withObjects:(NSArray*)objs{ NSUInteger count_idxes = [idxes count]; //NSUInteger count_objs = [objs count]; for(NSUInteger i = 0;i < count_idxes;i++){ NSUInteger x = [idxes[i] intValue]; @try{ [self replaceObjectAtIndex:x withObject:objs[i]]; } @catch(NSException *e){ NSLog(@"%@:%@",e.name,e.reason); [self replaceObjectAtIndex:x withObject:[NSNull null]]; } }}@endint main(void){ @autoreleasepool{ NSArray *idxes = @[@1,@3,@5]; //NSArray *objs = @[@"LOVE",@"FOR"]; NSArray *objs =@[]; NSMutableArray *mary = [@[@"a",@"and",@"b",@"for",@"ever",@"..."] mutableCopy]; NSLog(@"%@",mary); [mary replaceObjectsAtIndexesRand:idxes withObjects:objs]; NSLog(@"%@",mary); } return 0;}
当然ruby里也可以做类似的操作,why not?ruby比objc还要动态:
2.2.1 :066 > class Array2.2.1 :067?> def replace_rand(idxes,objs)2.2.1 :068?> idxes.zip(objs).each {|i,v|self[i] = v}2.2.1 :069?> end2.2.1 :070?> end => :replace_rand 2.2.1 :073 > ary => ["a", "b", "c", "d", "e", "f", "g"] ary.replace_rand 2.2.1 :074 > ary.replace_rand(idxes,objs) => [[1, "X"], [6, "X"]] 2.2.1 :075 > ary => ["a", "X", "c", "d", "e", "f", "X"]
see!ruby扩展类要比objc简单的多,所以看swift的了 :)
0 0
- objc写一个NSMutableArray不连续索引替换对象的方法
- NSMutableArray替换对象
- 多个连续的空格替换为一个空格的方法
- Qstring将多个连续的空格替换成一个空格的方法
- Qstring将多个连续的空格替换成一个空格的方法
- NSMutableArray的相关方法
- NSMutableArray的常用方法
- NSMutableArray的常用方法
- NSMutableArray的创建方法
- 一个连续登录的方法
- [面试题] 用最快的方法找到唯一一个不连续成对出现的字母
- 写一个替换for的语句
- 字符串所有连续的空格替换为一个空格
- 将多个连续的换行符替换成一个
- 替换连续的0
- android UiAutomator写一个等待对象出现的方法
- 写一个全局的方法替换字符串中相应位置的内容
- 替换连续空格为一空格的三种方法
- linux 设置环境变量的方法
- [USACO Jan09]安全路径Safe Travel解题报告
- Longest Consecutive Sequence
- 【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】
- LeetCode71 Simplify Path java题解
- objc写一个NSMutableArray不连续索引替换对象的方法
- 微信java开发(nat123配制本地环境)
- 【Oracle】ORA-00257归档日志写满的解决方法
- oracle session和process的关系
- [C++ primer]第六章笔记-函数
- java实习日记一
- cs193p assignment4 遇到问题及解决过程2
- [Mac] Mac OS/iOS/XCode版本历史
- 面稀土,战码家(一)