Заказ словаря - PullRequest
       15

Заказ словаря

2 голосов
/ 31 августа 2011

Я добавляю информацию в словарь, используя этот код:

foreach (string word in lineList)
{
    if (dictionary.ContainsKey(word))
        dictionary[word]++;
    else
        dictionary[word] = 1;
}

// I believe this is what needs to change..?
var ordered = from k in dictionary.Keys select k;

Когда я использую StreamWriter, чтобы распечатать строки, он печатает их в порядке, который был добавлен к dictionary.

То, что я пытаюсь сделать, это распечатать его в порядке, который сначала сравнивает PartDescription, а затем PartNumber и печатает его численно.

Файл выглядит такэто:

PartDescription        PartNumber        Name        X        Y        Rotation
1608RTANT              147430            J1        20.555   -12.121       180
TANTD                  148966            J2        20.555   -12.121       270
SOMETHING              148966            R111      20.555   -12.121       360
SOMETHING              148966            C121      20.555   -12.121       180
SOMETHING              148966            R50       205.555  -12.121       180
SOMETHING              148966            R51      -205.555  125.121       270
SOMETHING              148966            R52       20.555   -12.121       0
SOMETHING              148966            C12       20.555   -12.121       0
1709RTANT              147430            C98       20.555   -12.121       0
1608RTANT              147429            QD1       20.555   -12.121       180
1709RTANT              147430            F12       20.555   -12.121       0
1609RTANT              147445            P9        20.555   -12.121       180

StreamWriter будет выводить так:

1, 1608RTANT, 147429, 1   //Line#, PartDescription, PartNumber, # of Duplicates (from dictionary key)
2, 1608RTANT, 147430, 1
3, 1609RTANT, 147445, 1
4, 1709RTANT, 147430, 2
5, SOMETHING, 148966, 6
6, TANTD, 148966, 1

1 Ответ

7 голосов
/ 31 августа 2011

Ну, вы, конечно же, можете легко получить ключи упорядоченным способом:

var ordered = from k in dictionary.Keys orderby k select k;

Или еще проще:

var ordered = dictionary.Keys.OrderBy(x => x);

Обратите внимание, что вы не должны полагаться на словарь, хранящий пары в том порядке, в котором вы их добавили - в основном вы не должны предполагать любой порядок словаря.

...