Сортировка IList в C#
Этот вопрос вдохновил меня csharp написать сообщение в блоге: http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/
Я array-sorting думаю, что в идеале .NET generic Framework должна включать c#.net метод статической сортировки, который ilist принимает IList
public static class SortExtensions
{
// Sorts an IList in place.
public static void Sort(this IList list, Comparison comparison)
{
ArrayList.Adapter((IList)list).Sort(new ComparisonComparer(comparison));
}
// Sorts in IList in place, when T is IComparable
public static void Sort(this IList list) where T: IComparable
{
Comparison comparison = (l, r) => l.CompareTo(r);
Sort(list, comparison);
}
// Convenience method on IEnumerable to allow passing of a
// Comparison delegate to the OrderBy method.
public static IEnumerable OrderBy(this IEnumerable list, Comparison comparison)
{
return list.OrderBy(t => t, new ComparisonComparer(comparison));
}
}
// Wraps a generic Comparison delegate in an IComparer to make it easy
// to use a lambda expression for methods that take an IComparer or IComparer
public class ComparisonComparer : IComparer, IComparer
{
private readonly Comparison _comparison;
public ComparisonComparer(Comparison comparison)
{
_comparison = comparison;
}
public int Compare(T x, T y)
{
return _comparison(x, y);
}
public int Compare(object o1, object o2)
{
return _comparison((T)o1, (T)o2);
}
}
С помощью c-sharp этих расширений отсортируйте c-sharp свой IList так же, как и c#.net список:
IList iList = new []
{
"Carlton", "Alison", "Bob", "Eric", "David"
};
// Use the custom extensions:
// Sort in-place, by string length
iList.Sort((s1, s2) => s1.Length.CompareTo(s2.Length));
// Or use OrderBy()
IEnumerable ordered = iList.OrderBy((s1, s2) => s1.Length.CompareTo(s2.Length));
Дополнительная информация sorted в сообщении: http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/
c#
generics
sorting
ilist
Сортировка IList в C#
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.