2016-02-29 57 views
1

我有一個像分裂和訂購C類#

Class Foo 
{ 
public string info { get; set; }; 
public string name { get; set; } 
} 

現在一類,信息是這樣的:

id=2&pid=6 
id=2&pid=6&cid=7 
id=2 

現在,我想根據參數的數量進行排序它(劈裂後通過&)

所以,它應該是

id=2&pid=6&cid=7 
id=2&pid=6 
id=2 

但是,我有一個類的屬性列表。

我寫的代碼是:

private List<Foo> FuncADesc(List<Foo> listObj) 
     {   
      Dictionary<string, int> di1 = new Dictionary<string, int>(); 
      for (int i = 0; i < listObj.Count; i++) 
      { 
       Dictionary<string,string> diTemp = GetInfo(listObj[i].info); 
       if (diTemp != null) 
       { 
        di1.Add(listObj[i].info, diTemp.Count); 
       } 
      } 

      var list = di1.Keys.ToList(); 
      list.Sort(); // I want to sort by Descending 

      for (int i = 0; i < list.Count; i++) 
      { 
       listObj[i].info = list[i]; 
       listObj[i].name = // ??? // 
      } 

      return listObj; 
     } 

//Gets the dictionary after splitting by '&'   
private Dictionary<string, string> GetInfo(string Info) 
     { 
      Dictionary<string, string> dict1 = null; 
      if (!string.IsNullOrWhiteSpace(Info)) 
      { 
       NameValueCollection parse1 = HttpUtility.ParseQueryString(Info); 
       dict1 = parse1.Cast<string>() 
        .Select(s => new {Key = s, Value = parse1[s]}) 
        .ToDictionary(dictElement => dictElement.Key.ToLowerInvariant(), 
         dictElement => dictElement.Value.ToLowerInvariant()); 
      } 
      return dict1; 
     } 

我想回到listObj但名稱和信息獲取的交流。有一些簡單的方法,或者你可以指出,我可以在哪裏改變?

回答

2

你應該能夠使用LINQ做這樣簡單的事情,因爲這:

private List<Foo> FuncADesc(List<Foo> listObj) 
{ 
    return listObj.OrderByDescending(x => x.info.Count(c => c == '&')).ToList(); 
} 

OrderByDescending允許您爲了在下降的時尚物品。此方法使用每個項目的info屬性內的&字符數作爲按值排序。

+0

太棒了。謝謝 –

+0

不客氣。 –

+0

@demostack,如果它解決了您的問題,請考慮將此標記爲答案 –