2009-03-03 2 views
6

Я написал следующий код, и это тоже работает - но я хотел бы знать, является ли их это лучше, чем это:Как отсортировать имяValueCollection с помощью ключа в C#?

NameValueCollection optionInfoList = ..... ; 
if (aSorting) 
      { 
       optionInfoListSorted = new nameValueCollection();   
       String[] sortedKeys = optionInfoList.AllKeys; 
       Array.Sort(sortedKeys); 
       foreach (String key in sortedKeys) 
        optionInfoListSorted.Add(key, optionInfoList[key]); 

       return optionInfoListSorted; 
      } 

ответ

3

Может быть, вы могли бы использовать другой тип списка, который поддерживает непосредственно сортировки?

List<KeyValuePair<string, string>> optionInfoList = ...; 
if (sorting) { 
    optionInfoList.Sort((x,y) => String.Compare(x.Key, y.Key)); 
} 
return optionInfoList; 
+0

Мне нужно передать это другому классу и иметь List в моих сигнатурах метода дает мне ошибки анализа кода. –

+0

Не могли бы вы сказать, что вы имеете в виду под «ошибками анализа кода»? – Sung

4

Вместо этого используйте SortedDictionary.

+0

+1; или SortedList <,>, в зависимости от сценария. –

+5

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

+1

Если 'NameValueCollection' используется и отсортирован, как описано в примере с дублирующимися ключами, порядок является неопределенным для дубликатов ключей, поэтому список действительно не отсортирован, не так ли? –

1

Если у вас есть , у вас есть, чтобы использовать NameValueCollection, и у вас нет большого количества предметов в коллекции, тогда все в порядке. Нет необходимости получать какой-либо причудливый, чем это, если это будет сделано.

Если это узкое место в производительности, то перейдите.