List OrderBy Value <Value - PullRequest
       9

List OrderBy Value <Value

1 голос
/ 14 мая 2019

У меня есть список с классом, который содержит цены (самые низкие, средние, самые высокие).Теперь я хочу заказать список:

  1. низший <средний = первые записи |все остальные после этих записей упорядочены по наименьшему </li>
  2. наименьшему <среднему числу записей, упорядоченному по наибольшей разнице между наименьшим и средним </li>

Пример:

(unordered: low,avg,high)

{1, 2, 5}

{4, 3, 7}

{2, 5, 6}

{2, 1, 3}

(ordered: low,avg,high)

{2, 5, 6} -> highest difference between low < avg

{1, 2, 5} -> low < avg

{2, 1, 3} -> lowest low while low > avg

{4, 3, 7} -> ...

Вероятно, это довольно легко сделать, но у меня болит голова, когда я думаю об этом.Я пытался использовать .OrderBy и .GroupBy, но не могу заставить его работать.

1 Ответ

2 голосов
/ 14 мая 2019

Вы можете использовать

list.OrderByDescending(x => x.Average - x.Lowest).ThenBy(x => x.Lowest).ToList();

Учитывая, что ваш класс будет выглядеть

public class price
{
   int Lowest {get; set;}
   int Average {get; set;}
   int Highest  {get; set;}
}

Теперь вы хотите заказать список цен по условию Average - Lowest

List<Price> prices = new List<Price>(); 

тогда вы можете отсортировать его по

var sortedList = prices.OrderByDescending(x => (x.Average - x.Lowest)).ThenBy(x => x.Lowest).ToList();

POC: .net fiddle

...