按字段排序列表(C#)

Edw*_*d83 28 c# sorting list

我有这样的课:

class SortNode
{
    public Int32 m_valRating = 0;

    public SortNode(Int32 valRating)
    {
        this.m_valRating = valRating;
    }
}
Run Code Online (Sandbox Code Playgroud)

和一些清单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);
}
Run Code Online (Sandbox Code Playgroud)

如何轻松地refSortNodeListm_valRating字段排序?或者我可能需要使用其他List课程?

Mar*_*ell 62

list.Sort((x,y) =>
    x.m_valRating.CompareTo(y.m_valRating));
Run Code Online (Sandbox Code Playgroud)

  • 如果它比较null,则抛出. (2认同)
  • @Jon - 你当然可以编写代码,但是这里的null可能是一个错误 (2认同)

Jon*_*nna 14

到位:

refSortNodeList.Sort(
  (x, y) =>
    x == null ? (y == null ? 0 : -1)
      : (y == null ? 1 : x.m_valRating.CompareTo(y.m_valRating))
);
Run Code Online (Sandbox Code Playgroud)

创建一个新的枚举:

var newEnum = refSortNodeList.OrderBy(x => x.m_valRating);
Run Code Online (Sandbox Code Playgroud)

创建新列表:

var newList = refSortNodeList.OrderBy(x => x.m_valRating).ToList();
Run Code Online (Sandbox Code Playgroud)

就地是最快和最大的内存效率,但如果你想保留旧列表也没有好处.

接下来比最后一个快,并在结果出现时给出结果,但你必须重新进行排序再次使用它,在这种情况下,第三个是要去的那个.


Ken*_*enn 9

使用Linq命令.

var mySortedList = refSortNodeList.OrderBy(x => x.m_valRating);
Run Code Online (Sandbox Code Playgroud)

这是一个真实的实例,我从数据库中提取列表,但它是完全相同的概念.

 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>();
Run Code Online (Sandbox Code Playgroud)