считать все элементы в словаре - PullRequest
0 голосов
/ 21 февраля 2010

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

Пример:

alphabetDictionary
  a
    apple
    alien
  b 
   balloon
   ball

Теперь я хочу посчитать все записи в этом словаре:

apple
alien
balloon
ball
-> 4

При использовании этого исходного кода учитываются только объекты (a, b и т. Д.)

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

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

РЕДАКТИРОВАТЬ 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;

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

  • Символ H имеет 33 записи
  • количество H символов: 132
  • м символов: 1587
  • м символов: 6348

Есть идеи, почему эти цифры такие высокие?

Ответы [ 6 ]

3 голосов
/ 21 февраля 2010

a, b и т. Д. Являются ключами. Массивы [яблоко, инопланетянин] и т. Д. Являются объектами.

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

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

Или используйте этот очень медленный однострочный:

int count = [[[d allValues] valueForKeyPath:"@sum.@count"] intValue];
1 голос
/ 21 февраля 2010
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 голосов
/ 31 августа 2015

Я должен был сделать то же самое в Swift. У меня был Dictionary из arrays. В результате получается следующий код:

var totalItemsOfAllPages:Int {
    var totalItemsCount = 0

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

    return totalItemsCount
}
0 голосов
/ 27 июня 2011

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

0 голосов
/ 22 февраля 2010

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

Я использовал NSInteger вместо, если NSUInteger

0 голосов
/ 21 февраля 2010

Использование быстрое перечисление :

NSUInteger count = 0; 
for (id objectKey in alphabetDictionary.allKeys) {
    count += [alphabetDictionary objectForKey:objectKey].count;
}
NSString *countStr = [NSString stringWithFormat:@"Entries (%ud)", count];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...