我喜欢上课:
class SortNode
{
public Int32 m_valRating = 0;
public SortNode(Int32 valRating)
{
this.m_valRating = valRating;
}
}
和一些列表refSortNodeList
:
List<SortNode> refSortNodeList = new List<SortNode>();
Random refRandom = new Random();
for (int i = 0; i < 100; ++i)
{
refSortNodeList.Add(new SortNode(refRandom.Next(-10, 30)));
}
foreach (var varSortNode in refSortNodeList)
{
Console.WriteLine("SortNode rating is {0}", varSortNode.m_valRating);
}
如何轻松排序我的refSortNodeList
m_valRating
字段?或者我可能需要使用另一个List
类?
答案 0 :(得分:61)
list.Sort((x,y) =>
x.m_valRating.CompareTo(y.m_valRating));
答案 1 :(得分:13)
在就地:
refSortNodeList.Sort(
(x, y) =>
x == null ? (y == null ? 0 : -1)
: (y == null ? 1 : x.m_valRating.CompareTo(y.m_valRating))
);
创建新枚举:
var newEnum = refSortNodeList.OrderBy(x => x.m_valRating);
创建新列表:
var newList = refSortNodeList.OrderBy(x => x.m_valRating).ToList();
就地是最快且最节省内存的,但如果你想保留旧列表也没有好处。
下一个比上一个更快并且随着结果给出结果,但是你必须重新进行排序以再次使用它,在这种情况下,第三个是要去的那个。
答案 2 :(得分:8)
使用Linq命令。
var mySortedList = refSortNodeList.OrderBy(x => x.m_valRating);
这是一个真实的实例,我从数据库中提取列表,但它是完全相同的概念。
vendorProducts = (from vp in db.COMPANIES_VND_PRODUCTS
join p in db.CT_CT_INV_CLASSES on vp.CLASS_ID equals p.CLASS_ID
join m in db.CT_CT_MODALITY_CODES on vp.MODALITY_ID equals m.MODALITY_ID
where vp.COMPANY_ID == companyId
select new ProductTypeModality
{
Active = p.ACTIVE.Equals("Y") ? true : false,
BioMedImaging = p.BIOMED_IMAGING,
Code = p.CLASS_CODE,
Description = p.DESCRIPTION,
Id = p.CLASS_ID,
PricingMargin = p.PRICING_MARGIN,
ModalityCode = m.MODALITY_CODE,
ModalityId = m.MODALITY_ID,
VendorId = companyId
}).OrderBy(x => x.Code).ToList<ProductTypeModality>();
答案 3 :(得分:2)
答案 4 :(得分:1)
您可以使用Linq进行基本排序:
refSortNodeList.OrderBy(n => n.m_valRating);
如果您需要更复杂的排序,您需要实现IComparable
以使用内置排序。
答案 5 :(得分:1)
试试这个:
refSortNodeList.Sort(new delgate(SortNode x, SortNode y)
{
return x.CompareTo(y);
}
);
答案 6 :(得分:0)
使用linq很容易:
var newlist = refSortNodeList.sort( n => n.m_valRating );
答案 7 :(得分:0)
List<SortNode> refSortNodeList = new List<SortNode> ();
Random refRandom = new Random ();
for (int i = 0; i < 100; ++i) {
refSortNodeList.Add (new SortNode (refRandom.Next (-10, 30)));
}
// Use this (Linq) if you're using .NET 3.5 or above.
var sortedList = refSortNodeList.OrderBy (node => node.m_valRating);
foreach (var varSortNode in sortedList) {
Console.WriteLine ("SortNode rating is {0}", varSortNode.m_valRating);
}
// Use this otherwise (e.g. .NET 2.0)
refSortNodeList.Sort (
delegate (SortNode n1, SortNode n2) {
return n1.m_valRating.CompareTo (n2.m_valRating);
}
);
foreach (var varSortNode in refSortNodeList) {
Console.WriteLine ("SortNode rating is {0}", varSortNode.m_valRating);
}