【问题标题】:Sort Key/Pair based on a calculation根据计算对键/对进行排序
【发布时间】:2013-03-27 14:03:57
【问题描述】:

我有KeyValuePair,其中value 包含我的班级之一的通用列表。

所以对于每个值,我计算一列,并根据该值以表格格式显示它。

但我的问题是:对于每个值列表,它包含一行,0 作为我通过计算得到的列值。

所以我希望该价值位于首位。但现在它可以在任何地方。

那么我该如何根据该计算对其进行排序?

这是我的代码:

 @foreach (KeyValuePair<String, List<MyClass>> keyValuePair in aClient.ESelectionDictionary)
{
    foreach (MyClass eData in keyValuePair.Value)
    {
        string weight;
        ............
        //Here comes some calculations
        ............
        if (weight == 0d)
        {
            addclass = "class=hidden";
        }
        else
        {
            addclass = "class=main";
        }
    }
}

所以对于eData 中的所有值,weight 始终是0d,除了一个值。

【问题讨论】:

  • 你能发布你的代码吗?
  • “对于每个值我计算一列” - 你的意思是什么列?
  • 我们需要根据您的帖子判断的计算进行排序,请问您可以发布计算吗?
  • 一个建议不是答案,使用Dictionary 而不是KeyValuePair 列表

标签: c# sorting dictionary


【解决方案1】:

根据前一个字典创建一个新字典,列表由您的自定义函数排序以计算列索引:

var reshuffled = aClient.ESelectionDictionary.ToDictionary(
   kvp => kvp.Key,
   kvp => kvp.Value.OrderBy(CalculateColumnIndex)
);

【讨论】:

    【解决方案2】:

    添加中间集合,您将在其中按所需顺序获取项目并实现两个循环,第一个将按照您要查找的顺序填充集合,第二个循环将呈现表格:

    var list = new List<MyClass>(keyValuePair.Value.Count);
    
    foreach (MyClass eData in keyValuePair.Value)
    {
        string weight;
        ............
        //Here comes some calculations
        ............
        if (weight == 0d)
        {
            list.Insert(0, eData);
        }
        else
        {
            list.Add(eData);
        }
    }
    
    foreach (var eData in list)
        // render eData into table
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 2011-12-11
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多