拆分和排序类c#

时间:2016-02-29 23:50:00

标签: c# asp.net

我有一个像

这样的课程
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,但名称和信息会被交换。是否有一些简单的方法或者你能指出,我可以在哪里改变?

1 个答案:

答案 0 :(得分:2)

你应该能够使用LINQ做一些简单的事情:

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

OrderByDescending允许您以递减的方式订购商品。此方法使用每个项目的&属性中的info个字符数作为按值排序。