romaGri / NET-Tasks

0 stars 0 forks source link

SortTupleArray<T1, T2, T3> issue #2

Open aorgish opened 5 years ago

aorgish commented 5 years ago

1) Для сортировки можно использовать стандартный метод Array.Sort (https://docs.microsoft.com/en-us/dotnet/api/system.array.sort?view=netframework-4.7.2) . 2) И надо постараться избавиться от copy-paste стиля для различных sortedColumn.

romaGri commented 5 years ago

исправлено

aorgish commented 5 years ago

Copy-paste остался, замена switch на if-else не меняет суть дела: https://github.com/romaGri/.NET-Tasks/blob/a91ba498578d537effd4b90039df9c66f5b33643/02-Generics/Generics/Generics.cs#L177-L188

Для избавления от copy-paste смотрим, чем отличаются эти куски кода (Item1, Item2, ...) и выносим изменяющиеся части в переменную:

var propGetters = new Func<Tuple<T1, T2, T3>, IComparable>[] 
{
     x => x.Item1,
     x => x.Item2,
     x => x.Item3
};
var propGetter = propGetters[sortedColumn];

var koeff = ascending ? +1 : -1;

Array.Sort(array, (x, y) => koeff * propGetter(x).CompareTo(propGetter(y));