2016-02-29 92 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,如果它解决了您的问题,请考虑将此标记为答案 –