Ios 按字母顺序将数组拆分为多个数组
我有一个数组,看起来像Ios 按字母顺序将数组拆分为多个数组,ios,objective-c,arrays,Ios,Objective C,Arrays,我有一个数组,看起来像 NSArray *array=@[@"apple",@"animal",@"ant",@"beat",@"bean".....]; 我需要按字母顺序分成多个数组 我正在添加我尝试过的代码 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH 'a'"]; NSArray *aElements = [arrLastName filterUsingPredicate:p
NSArray *array=@[@"apple",@"animal",@"ant",@"beat",@"bean".....];
我需要按字母顺序分成多个数组
我正在添加我尝试过的代码
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH 'a'"];
NSArray *aElements = [arrLastName filterUsingPredicate:predicate];
NSPredicate工作正常,但在第二行我收到一个错误
我不需要解决这个错误。唯一需要做的是将数组以字母顺序重新组合为多个数组
Initializing 'NSArray *__strong' with an expression of incompatible type 'void'
您将
NSMutableArray
方法filterAsingPredicate
与NSArray
方法filterDarrayusingPredicate
相混淆。前者修改receiverNSMutableArray
并返回void。后者保持原始数组不变,并返回一个新数组
所以你想要的是-
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH 'a'"];
NSArray *aElements = [arrLastName filteredArrayUsingPredicate:predicate];
但是,这种方法需要多次迭代数组。我将使用以下方法-
NSMutableDictionary *alphaArrays=[NSMutableDictionary new];
for (NSString *word in arrLastName) {
NSString *firstletter=[word substringToIndex:1];
NSMutableArray *wordArray=alphaArrays[firstletter];
if (wordArray == nil) {
wordArray=[NSMutableArray new];
alphaArrays[firstletter]=wordArray;
}
[wordArray addObject:word];
}
您将
NSMutableArray
方法filterAsingPredicate
与NSArray
方法filterDarrayusingPredicate
相混淆。前者修改receiverNSMutableArray
并返回void。后者保持原始数组不变,并返回一个新数组
所以你想要的是-
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH 'a'"];
NSArray *aElements = [arrLastName filteredArrayUsingPredicate:predicate];
但是,这种方法需要多次迭代数组。我将使用以下方法-
NSMutableDictionary *alphaArrays=[NSMutableDictionary new];
for (NSString *word in arrLastName) {
NSString *firstletter=[word substringToIndex:1];
NSMutableArray *wordArray=alphaArrays[firstletter];
if (wordArray == nil) {
wordArray=[NSMutableArray new];
alphaArrays[firstletter]=wordArray;
}
[wordArray addObject:word];
}
问题在于
filterSingPredicate:
它过滤NSMutableArray
本身,并且不会返回任何内容(返回类型为void
)
您需要使用filteredarrayingpredicate:
(它返回一个经过过滤的NSArray
)
选中,您可以看到如下声明的方法:
- (void)filterUsingPredicate:(NSPredicate *)predicate
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
问题在于
filterSingPredicate:
它过滤NSMutableArray
本身,并且不会返回任何内容(返回类型为void
)
您需要使用filteredarrayingpredicate:
(它返回一个经过过滤的NSArray
)
选中,您可以看到如下声明的方法:
- (void)filterUsingPredicate:(NSPredicate *)predicate
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
使用此库,将很容易解决LinqToObjectiveC 此库具有以下方法groupBy
使用此库,将很容易解决LinqToObjectiveC 此库具有以下方法groupBy
您会遇到什么错误?使用不兼容类型的表达式“void”初始化“NSArray*\uuu-strong”会遇到什么错误?使用不兼容类型的表达式“void”初始化“NSArray*\uu-strong”可能更有效,但是只需迭代数组一次,将元素添加到26个可变数组中的1个,正如您所解决的错误,但主要问题是我需要拆分为另一个数组字母,使用此技术,您需要创建26个谓词,每个谓词将迭代数组。是的,但数组元素不会进入新数组,我得到的是空数组它将所有元素添加到数组@paulwIt中可能更有效,但是,只要迭代数组一次,将元素添加到26个可变数组中的1个,正如您所解决的错误,但主要的是我需要拆分为另一个数组,使用此技术,您需要创建26个谓词,每个谓词将迭代数组。是的,但数组元素没有进入新数组,我得到的是空数组它将所有元素添加到数组@paulwthanks中,以获得答案@midhun,您的答案解决了错误,但数组元素仍无法进入新的array@Coolcracker:检查谓词,并检查arrLastName是否包含任何数据。在您的代码中,您正在填充
array
并使用arrLastName
。感谢@midhun的回答,您的回答解决了错误,但数组元素仍然没有进入新的数组array@Coolcracker:检查谓词,并检查arrLastName是否包含任何数据。在您的代码中,您正在填充数组
并使用arralstname
。