【发布时间】:2011-11-07 03:39:03
【问题描述】:
我正在使用此代码向字典添加信息:
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
【问题讨论】:
-
作为替代方案,您可以使用 SortedDictionary
。它比 Dictionary 稍慢,因为 SD 为 O(log 2 n),D 为 O(1),但它始终保持数据排序。仅取决于哪个对您的使用更重要:可能的最快查找或保持数据有序。如果您只是将其排序一次以进行输出,请按照建议进行排序。我只是想放弃另一个选项,以防万一您需要在多个位置按顺序排列数据,那么排序成本可能会增加,并使 SD 值得稍微慢一点的查找。
标签: c# sorting dictionary duplicates