У меня возникла проблема с созданием индекса из NSArray
, содержащего множество NSDictionaries
, где я хочу индексировать значения, основанные только на ключе username
словаря. В качестве иллюстрации, каждый словарь выглядит примерно так:Создание индекса для UITableView на основе значений внутри NSArray из NSDictionaries
{
username => "daspianist", //<- Only want to use this value to create index
objectId => "hjd72h3jd",
createdAt => "30-1-2014",
updatedAt => "30-1-2014"
}
На данный момент я упростил этот вопрос, так что я индексирование NSArray
из NSStrings
, и что я делаю следующее:
//Note that `stringArray` is passed to this method
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (char firstChar = 'a'; firstChar <= 'z'; firstChar++)
{
NSString *firstCharacter = [NSString stringWithFormat:@"%c", firstChar];
NSArray *content = [stringArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", firstCharacter]];
NSMutableArray *mutableContent = [NSMutableArray arrayWithArray:content];
if ([mutableContent count] > 0)
{
NSString *key = [firstCharacter uppercaseString];
[dict setObject:mutableContent forKey:key];
NSLog(@"%@: %u", key, [mutableContent count]);
}
}
Я изо всех сил пытаюсь преобразовать то, что я делал для NSStrings, чтобы быть внутри значений для ключа username
в моих NSDictionaries, и был бы признателен за любые указания. Благодаря!
Update
Чтобы уточнить, результирующая словарь, что я заинтересован в будет выглядеть примерно так
{
"a" => {
username => "aardvark",
otherKeys => "otherValues"
},
{
username => "applepicking",
otherKeys => "otherValues"
}
"d" => {
username => "daspianist",
otherKeys => "otherValues"
}
....
}
Update 2
Решение напечатал базируется в Wain
' s для простоты использования:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (char firstChar = 'a'; firstChar <= 'z'; firstChar++)
{
NSString *firstCharacter = [NSString stringWithFormat:@"%c", firstChar];
NSArray *content = [userNamesArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", firstCharacter]];
NSMutableArray *mutableContent = [NSMutableArray arrayWithArray:content];
NSPredicate *p = [NSPredicate predicateWithFormat:@"username IN %@", content];
if ([mutableContent count] > 0)
{
NSString *key = [firstCharacter uppercaseString];
NSArray *values = [originalDictionary filteredArrayUsingPredicate:p];
[dict setObject:values forKey:key];
NSLog(@"%@: %lu", key, (unsigned long)[mutableContent count]);
}
}
NSLog(@"The dictionary is %@", dict);
Таким образом, конечный результат вы хотите это словарь. Ключами являются одиночные символьные строки, значения - это массивы словарей (имена пользователей, соответствующие одному символу)? – Wain
@Wain Да, это правильно. Например, результирующий словарь будет иметь «ключ» как «А», а значения - «NSDictionaries», у которых «имя пользователя» начинается с «А». – daspianist