2012-05-08 3 views
0

У меня есть словарь, который сортируется в порядке убывания. Каждая строка (ключ) является термином и значением int (value). Как я получаю первый счет? потому что это относится к максимальному счету (частоте) ....... спасибо заранее.Первый пункт в словаре

Just to inform some of whom commented that the dictionary<string,int> will change its 
rank. Be sure, if you are grouping the dictionary by its count, there is no problem 
with the order . Always the dictionary will come with highest count at first. 
+1

'dict.First()' ?! http://stackoverflow.com/a/436957/284240 Возможно, вы захотите использовать ['OrderedDictionary'] (http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx) вместо –

+0

Словари - это хеш-таблицы. Они не отсортированы. Покажите нам какой-то код. – Steven

+0

@Tim Schmelter u означает Dict.value .... правильно? – FSm

ответ

6

Что вы подразумеваете под «словарем, отсортированным по убыванию»? A Dictionary<TKey,TValue> по определению является несортированным! Вы имеете в виду SortedDictionary<TKey,TValue>? Если да, то вы можете использовать:

var firstCount = sortedDictionary.First().Value; 
+0

nope, это просто словарь, но я нащупал его по его значению – FSm

+0

SortedDictionary не поддерживает нисхождение или сортировку по значению (что, я считаю, имеет место здесь). –

+0

@ Chris, так делает. и я уверен в этом. – FSm

0

насчет ниже

yourDictionary.First().Value 

иметь в виду, что при добавлении новых значений может очень хорошо изменить порядок

MSDN предупреждает о том, что

http://msdn.microsoft.com/en-us/library/ekcfxy3x(v=vs.100).aspx

+0

, но мой словарь всегда приходит с наивысшим счетом в первом – FSm

1

Вы не можете зависеть от Dictionary, чтобы оставаться заказанным (за исключением, конечно, OrderedDictionary). Если вы используете OrderedDictionary, вы можете использовать его индексацию:

var maximumCount = myDictionary[0]; 

или

var maximumCount = myDictionary.First().Value; 

EDIT: Если вы хотите самый высокий счет во всем словаре, вы могли бы просто использовать это:

var maximumCount = myDictionary.Max(entry => entry.Value); 
+0

@ Botz, вы правы, но я уже поместил каждый Maxcount для каждого возвращаемого dic в массиве [int]. спасибо за уведомление. – FSm

0

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

OrderedDictionary list = new OrderedDictionary(); 

// add a bunch of items 

int firstValue = (int)list[0]; 

Единственный недостаток с OrderedDictionary является то, что это не универсально, но вот то, как вы можете сделать его универсальным. http://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IO

+0

ничего плохого я не думаю. мой словарь всегда приходит с наивысшим значением в первом – FSm

+0

@Qaesar - при заказе коллекции <> не гарантируется тот же порядок, что и при добавлении элементов.Может показаться, что это просто потому, что он работает сейчас, но в производстве он может не дать правильного результата. Надеюсь, вы не пишете биржевой тикер или какой-либо финансовый продукт. –

+0

ха-ха ... нет это не тип финансового продукта. но поверьте мне, это не проблема, потому что я возвращаю всю ценность dic один раз. – FSm

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