2016-02-26 2 views
0

Я известное количество ids (хранится в вар count), и я хочу, чтобы получить количество вхождений каждого идентификатора при зацикливание внутри процесса:Как увеличить значение в hashmap, когда id встречается внутри цикла?

//init hashtable 
Hashtable hashtable = new Hashtable(); 
for (int i=0; i<count;i++) 
{ 
    hashtable.Add(i, 0); 
} 

for (int i=0; i<count;i++) 
{ 
    //some process to get and id 
    // for instance 
    // 14 
    // 17 
    // 17 
    // 3 
    // how to search i id and increment value? 
} 

Так результат будет

Hash(14,1) 
Hash(17,2) 
Hash(3,1) 

Как выполнить поиск и обновление значения хэш-таблицы?

ответ

1

Это позволит получить значение и установить его на новое значение с помощью item indexer. Класс HashTable не является строго типизированным, поэтому вы должны явно вернуть его обратно в int.

for (int i=0; i<count;i++) 
{ 
    var id = ...get id...; 
    hashtable[id] = ((int)hashtable[id]) + 1; 
} 
1

Вместо этого я предлагаю использовать Dictionary<int,int>, где каждый ключ словаря слова сопоставляется с количеством раз, которое имеет значение.

var idMap = new Dictionary<int,int>(); 
for (int i=0; i<count;i++) 
{ 
    if(idMap.ContainsKey(id)) 
    { 
    idMap[id] = idMap[id]+1; 
    } 
    else 
    { 
    idMap[i] = 1; 
    } 
} 
+0

Я ищу эффективность здесь, как 10 миллиардов записей, будет ли Словарь вести себя лучше, чем hashmap? – cMinor

+1

Это не поместится в память в любом случае - вам нужен другой способ решить вашу проблему. – BrokenGlass

+0

Хорошо, и с точки зрения скорости? вы бы предложили использовать словарь? – cMinor

Смежные вопросы