簡體   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