【问题标题】:Ordering a Dictionary订购字典
【发布时间】: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


【解决方案1】:

您当然可以轻松地以有序的方式获得钥匙:

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

或者更简单:

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

请注意,您不应该依赖按照添加它们的顺序存储对的字典 - 基本上,您不应该假设 any 从字典。

【讨论】:

  • @theNoobGuy:您更新的代码与原始代码没有明显的关系——没有排序的迹象。请发布一个简短但完整的程序来演示问题。
  • 好的,我添加了如何填充列表...这有帮助吗?
  • @theNoobGuy:不是真的 - 这不是一个简短但完整的程序,而且您还没有显示您尝试在哪里使用按键的有序视图。我要睡觉了,但是如果您发布一个简短但完整的示例(提示:我们应该能够剪切/粘贴/编译/运行而无需更多工作),也许其他人将能够提供更多帮助。
猜你喜欢
  • 1970-01-01
  • 2010-10-26
  • 2013-06-10
  • 2011-05-15
  • 2023-01-30
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多