我有一个像
这样的课程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,但名称和信息会被交换。是否有一些简单的方法或者你能指出,我可以在哪里改变?
答案 0 :(得分:2)
你应该能够使用LINQ做一些简单的事情:
private List<Foo> FuncADesc(List<Foo> listObj)
{
return listObj.OrderByDescending(x => x.info.Count(c => c == '&')).ToList();
}
OrderByDescending
允许您以递减的方式订购商品。此方法使用每个项目的&
属性中的info
个字符数作为按值排序。