2

在 xcode 中,我有一个从在线 sql 数据库请求的数据库,它可以存储到数组或 NSDictionary 或其他类型中。另外,在应用程序中生成一个数字数组,它们对应于数据库的一个列。

我想过滤数据库以仅显示与生成的数组有关的对象。过滤后,我想在字符串中列出结果。如果需要,来自在线服务器的数据库可以存储在 NSArray 或 NSDictionary 中,可能还有其他我不知道的格式。

该过程将如下所示:

数据库数组:生成的数组:过滤数据库后的结果数组:

ID    |    Name          ID                        FilteredNames
      |
1A    |   Hannah         1A                          Hannah
2A    |   John           1B                          Steve
3A    |   Peter          2B                          Zara
1B    |   Steve
2B    |   Zara
3B    |   Kyle

将生成的数组“FilteredNames”转换为字符串列表,如下所示:

NamesString = @"Hannah, Steve, Zara" 

然后我计划将 NamesString 传递给标签,如下所示:

label.text=NamesString;

所以视图中的标签只显示:

                                Hannah, Steve, Zara 

在整个过程中,我非常需要帮助。

4

1 回答 1

1

编辑根据 Martin 的评论,将谓词格式更改为更合适的格式。

- (NSArray *)filterObjects:(NSArray *)objects withNames:(NSArray *)names {
  return [objects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name IN %@", names]];
}

// given that the 'objects' array is what you get from server
  NSArray *objects = @[
                       @{@"id" : @"1A", @"name" : @"Hannah"},
                       @{@"id" : @"2A", @"name" : @"John"},
                       @{@"id" : @"3A", @"name" : @"Peter"},
                       @{@"id" : @"1B", @"name" : @"Steve"},
                       @{@"id" : @"2B", @"name" : @"Zara"},
                       @{@"id" : @"3B", @"name" : @"Kyle"}
                       ];

  NSArray *filteredObjects = [self filterObjects:objects withNames:@[@"Hannah", @"John", @"Zara"]];
  NSLog(@"filteredObjects: %@", filteredObjects); // prints them out as dictionaries

  NSString *unitedNames = [[filteredObjects valueForKeyPath:@"@unionOfObjects.name"] componentsJoinedByString:@", "];
  NSLog(@"unitedNames: %@", unitedNames); // comma separated array of names
于 2013-04-18T00:19:03.967 回答