使用自定义比较对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=字符串。空的
区块报价
上面的数组列表将自行排序。
您可以通过实现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此处的可比较信息