使用自定义比较对ArrayList排序

本文关键字:ArrayList 排序 比较 自定义 | 更新日期: 2023-09-27 18:29:54

我正在尝试使用c#对ArrayList进行排序。当ArrayList包含可比较对象时,可以使用list.Sort()进行排序,但我需要对包含不可比较对象的ArrayList进行排序。例如,假设对象是Ring,并且它具有属性属性Price。然后我需要根据价格订单对ArrayList进行排序。如果可以选择升序或降序,这将更有帮助。非常感谢。

区块报价

arrAtdMon=**(ArrayList)**hashTb[unixMon];

if(arrAtdMon!=null)monCount=arrAtdMon.Count;

int[]arrayMax={monCount,tueCount,wedCount,thuCount,friCount};

int maxValue=arrayMax.Max();

KidAttendance valMon=null;string monTagName=字符串。空的

区块报价

上面的数组列表将自行排序。

使用自定义比较对ArrayList排序

您可以通过实现IComparer接口来实现这一点:-

public class Ring : IComparer
{
    public decimal Price { get; set; }
    public int Compare(object x, object y)
    {
        return ((Ring)x).Price.CompareTo(((Ring)y).Price);
    }
}

工作Fiddle。

首先,您确实应该使用List<T>类,而不是ArrayList。这样做不会解决您的问题,但会使代码不那么脆弱,更易于维护。

至于具体的问题,你想做这样的事情…

假设:

class Ring { public decimal Price { get; set; } }

然后:

ArrayList list = ...; // Initialized as some collection of Ring instances
list.Sort(Comparer.Create((r1, r2) => r1.Price.CompareTo(r2.Price)));

这将使用(r1, r2) => r1.Price.CompareTo(r2.Price)Comparison<T>创建一个新的Comparer实例。也就是说,对于被比较的每对对象,将第一个对象的价格与第二个对象的成本进行比较。

假设这些对象与price属性共享一个基类或接口,您应该能够执行以下操作:

// Base class with price property, could also be an shared interface
public abstract class Product
{
    public decimal Price{get;set;}
}
public class Ring : Product
{
}
public class Bag : Product
{
}
// Some test data
var myUnsortedArray = new Product[]{new Ring{Price = 1.2m}, new Bag{Price=2.5m}};
// Easy sort with LINQ
var sortedProducts = myUnsortedArray.OrderBy(p => p.Price).ToArray();
var sortedProductsDescending = myUnsortedArray.OrderByDescending(p => p.Price).ToArray();

更新

我刚刚意识到问题是关于ArrayLists的,并在下面更改了解决方案:

// Some test data
var myUnsortedArrayList = new ArrayList{new Ring{Price = 1.2m}, new Bag{Price=2.5m}};
// Easy sort with LINQ
var sortedProducts = myUnsortedArrayList.OfType<Product>().OrderBy(p => p.Price).ToArray();
var sortedProductsDescending = myUnsortedArrayList.OfType<Product>().OrderByDescending(p => p.Price).ToArray();

要对一组对象进行排序,对象需要是Comparable,并且可以在CompareTo()方法中设置所需的比较:I此处的可比较信息