Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 按字母顺序将数组拆分为多个数组_Ios_Objective C_Arrays - Fatal编程技术网

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
相混淆。前者修改receiver
NSMutableArray
并返回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
相混淆。前者修改receiver
NSMutableArray
并返回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