2009-08-20 5 views
0

У меня 3 уровней для PlanSolution 1,2,3 и мне нужно для сортировки по .levelId на начальном этапе, а затем по алфавиту рода решение, принадлежащего к этому уровню, .nameC# множественная сортировка

PlanSolution[] planSolutions = wsAccess.GetPlanSolutionsForPlanRisk(planRisk.Id); 
        List<PlanRisk> planSolutionsList = new List<PlanRisk>(planSolutions); 


        planSolutionsList.Sort(delegate(PlanSolution x, PlanSolution y) 
        { 
         //HELP lol 
        }); 
+1

Вам не нужно создавать '' List просто сделать сортировку. Просто используйте метод «Array.Sort()», а также один из делегатов, предоставленный во многих решениях. Linq может быть излишним, если ваш массив большой, так как может потребоваться его копирование, если вы хотите сохранить его как массив или список (через 'ToList()' или 'ToArray()'). –

ответ

6

LINQ к спасение!

planSolutionsList = planSolutions 
    .OrderBy(x => x.id) 
    .ThenBy(x => x.Name) 
    .ToList(); // is this necessary? 

Для исходного формата - вы просто хотите, чтобы ваши Comparer приоритеты ID над именем

planSolutionsList.Sort((x, y) => 
{ 
    //HELP lol 
    if (x.id != y.id) return x.id - y.id; 
    else return x.Name.CompareTo(y.Name); 
}); 
0

Для языка-acnostic подхода: У каждого из них в порядке.

1) Сортировать по уровню. 2) Помните начальные местоположения каждого уровня после сортировки 3) повторите для следующего сортировочного критерия, только сортируя подразделы.

1

вы могли бы использовать Linq

planSolutionsList.OrderBy(x => x.Level).ThenBy(x => x.Name).ToList(); 
0
planSolutionsList.Sort(delegate(PlanSolution x, PlanSolution y) { 
    if (x.Level == x.Level) {   // same level, compare by name 
     return x.Name.CompareTo(y.Name); 
    } else {        // different level, compare by level 
     return x.Level.CompareTo(y.Level); 
    } 
    }); 
Смежные вопросы