【问题标题】:Trying to find the top 3 properties of a POCO instance, Part 2尝试查找 POCO 实例的前 3 个属性,第 2 部分
【发布时间】:2010-11-22 04:07:41
【问题描述】:

一个月前我问了这个问题:Trying to find the top 3 properties of a POCO instance。得到了答案,效果很好。

现在,我正在尝试查找 POCO 对象的前 3 个属性(就像我之前的问题一样),但每个属性都有一个 WEIGHT。财产的价值是第一位的。然后权重排在第二位……如果两个或多个属性具有相同的值。

让我们扩展我之前问题中的数据作为示例的起点:-

权重数值越小越好。 1 == 最好。 10是最差的。顺便说一句,每个重量编号都是唯一的。重量数字可以是任何东西......我只需要以某种方式 weight em....

eg.
Math (weight: 1) - 83%
Engrish (weight: 6) - 82%
Chemistry (weight: 2) - 81%
Drama (Weight: 3) - 100%
Geography (weight: 4) - 82%
Sport (Weight: 5)- 81%
etc..

排名前 3 的结果依次为:

  • 戏剧
  • 数学
  • 地理(不是英语。地理 W = 4,英语 W = 6)

我想知道这是否可以通过 Linq 实现(就像我之前的问题/答案一样)。我对字典等感到满意。我还猜测我可能需要重载 Comparer 方法?

为任何帮助干杯:)

【问题讨论】:

    标签: .net linq algorithm poco


    【解决方案1】:

    嗯。根据您之前的回答,并由我决定。 (即未测试)

    var result = (from p in pairs
                  orderby p.Value descending, p.Weight
                  select p);
    
    var result = pairs.OrderByDescending(p => p.Value)
                      .ThenBy(p => p.Weight);
    

    【讨论】:

    • 那么... WTF?!没门!!!!!! 那个存在?!我越来越喜欢linq(如果可能的话)。 brb ....
    • 喷砰!!!!!!!!!!!!!!!温娜。这真是太棒了。谢谢一堆伙伴,这让我度过了一周! (我喜欢 linq 和 SO)。
    【解决方案2】:

    使用与之前相同的答案,但在排序时将值乘以权重。

    【讨论】:

    • 将值乘以重量?这听起来不对....我试图认为,如果我有一个值为 1 的 100% 和一个值为 6 的 99%,那么 99% 将首先列出,这不是对。
    猜你喜欢
    • 2010-11-15
    • 2015-01-15
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多