繁体   English   中英

如何在相同重量下订购多个参数?

[英]How to orderby more then one parameter in the same weight?

我试图制作一个按多个参数对对象进行排序的程序。 我需要 order by 对所有参数具有相同的权重。 我需要使用哪些功能才能获得该结果?

我尝试使用OrderBy()然后 - ThenBy()但它首先对第一个参数进行排序,因此排序不相等。

values = File.ReadAllLines(filepath)
              .Skip(1)
              .Select(v => Fund.FromCsv(v))
              .OrderByDescending(x => x.sharp)
              .ThenBy(x=>x.yearlychange)
              .ToList();

例如,您可以以股票市场为例,在这种情况下,我想按去年的收益率排序股票,但也按标准差排序。 通过这种方式,我可以获得去年收益率最高但标准差也最好的股票。 它不会是所有产品中最好的,它会被合并。

正如您已经了解的那样,这并不是一个真正的程序问题,更像是算法/领域问题。 不过,如果您已经拥有该算法,那么您当然可以这样做。 (基于您在评论中提供的示例)

void Main()
{
    var funds = new List<Fund>();   
    funds.Add(new Fund() { Age = 18, Money = 100000 });
    funds.Add(new Fund() { Age = 20, Money = 101000 });

    //Here is normally your code with loading it from CSV
    //File.ReadAllLines(filepath)
    //        .Skip(1)
    //        .Select(v => Fund.FromCsv(v))

    var value = funds.OrderBy(t => t.SortingFactor);
}

public class Fund
{
    public int Age { get; set; }
    public decimal Money { get; set; }
    public decimal SortingFactor
    {
        get
        {
            //Here is your domain algorithm you must sort out first (your example data would be)
            return Money / Age;
        }
    }
}

我不确定我是否完全理解您的目标,但如果资金不是您可以修改的代码,另一种选择是您的订单中的匿名 object,例如

values = File.ReadAllLines(filepath)
              .Skip(1)
              .Select(v => Fund.FromCsv(v))
              .OrderByDescending(x => new { x.sharp, x.yearlychange })
              .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM