2010-02-21 4 views
0

мой вопрос: У меня есть словарь с одним объектом для каждого символа алфавита. Внутри этих объектов есть все значения для определенного символа.count все элементы в словаре

Пример:

alphabetDictionary 
    a 
    apple 
    alien 
    b 
    balloon 
    ball 

теперь я хочу, чтобы подсчитать все записи в пределах этого словаря:

apple 
alien 
balloon 
ball 
-> 4 

Используя этот программный код подсчитывает только объекты (а, б и т.д.)

NSString *counter = [NSString stringWithFormat:@"Entries (%d)", alphabetDictionary.count]; 

Итак, как мне получить все записи, а не объекты a, b и т. Д.?

EDIT 1: В методе viewDidLoad у меня есть:

//Initialize the array. 
charDict = [[NSMutableDictionary alloc] init]; 
alphabetArray = [[NSMutableArray alloc] init]; 

if ([charSpecialArray count] > 0) { 

    //Set object for this character within the dictionary 
    [charDict setObject:charSpecialArray forKey:@"#"]; 
    //fill the alphabetArray with an index value, if this char exists at all 
    [alphabetArray addObject:@"#"]; 
} 

if ([charAArray count] > 0) { 

    [charDict setObject:charAArray forKey:@"A"]; 
    [alphabetArray addObject:@"A"]; 
} 

и т.д .. для каждого символа

следуют:

totalCounter = 0; 
//Count all keys within the Dictionary 
for (id objectKey in charDict.allKeys) { 
    totalCounter += [[charDict objectForKey:objectKey] count]; 
    NSLog(@"Anzahl: %d", totalCounter); 
} 
NSString *counter = [NSString stringWithFormat:@"TXNs (%d)", totalCounter]; 

self.title = counter; 

результаты смотрят слишком высоко:

  • Характер Н имеет 33 записи
  • графа H символов приводит к: 132
  • м символов: 1587
  • м символов Count: 6348

Любые идеи, почему эти отсчеты это высокое?

+0

У вас есть H всего лишь 33 записей? – kennytm

+0

Если # слишком велико, это потому, что у вас больше элементов, чем вы ожидаете в массивах, содержащихся в словаре. Поскольку вы не указали свой источник данных, больше не сможете помочь. – bbum

ответ

0

Решение моей проблемы: Я использовал NSInteger вместо NSUInteger

0

Применение fast enumeration:

NSUInteger count = 0; 
for (id objectKey in alphabetDictionary.allKeys) { 
    count += [alphabetDictionary objectForKey:objectKey].count; 
} 
NSString *countStr = [NSString stringWithFormat:@"Entries (%ud)", count]; 
+0

Ну, сам подсчет работает .. но во всяком случае число, которое я получаю, слишком велико. Я обновил свой вопрос ... – Daniel

+1

Я не уверен, что было бы неправильно с кодом, честно. Я бы сделал тестовые примеры со словарем, в котором есть небольшой набор известных объектов. –

+0

проблема была я использовал NSInteger, если NSUInteger – Daniel

3

а, б и т.д. являются ключами. Массивы [apple, alien] и т. Д. Являются объектами.

Чтобы получить общее количество, вам нужно перебрать словарь и подвести итог:

NSUInteger total = 0; 
for (NSString* key in alphabetDictionary) { 
    total += [[alphabetDictionary objectForKey:key] count]; 
} 
return total; 

Или использовать этот очень медленный Однострочник:

int count = [[[d allValues] valueForKeyPath:"@[email protected]"] intValue]; 
+0

, к сожалению, остается ошибка с очень большим количеством отсчетов ... – Daniel

1
NSEnumerator *aEnum = [alphabetDictionary objectEnumerator]; 
id object; 
NSUInteger count = 0; 
while(object = [aEnum nextObject]){ 
count += [object count]; // assuming that the object is an array 
} 
NSString *countStr = [NSString stringWithFormat:@"Entries (%ld)",count]; 
// %d NO ofcourse not its not a NSInteger we want a Long 
+0

, к сожалению, это не исправляет большое количество проблема, тоже .. – Daniel

0

Я m не смог удалить этот вопрос из-за голосования и всех ответов. Так вот мой собственный ответ на вопрос, почему число подсчитанных записей, где так высоко:

я использовал NSInteger вместо этого, если NSUInteger

0

Мне пришлось сделать то же самое в Свифт. У меня был Dictionary от arrays.Результат следующего кода:

var totalItemsOfAllPages:Int { 
    var totalItemsCount = 0 

    loadedPages.values.array.map({ 
     totalItemsCount += $0.count 
    }) 

    return totalItemsCount 
} 
Смежные вопросы