2014-12-26 2 views
-3
  1. 최대 모음을 가진 상태가 먼저 와야합니다. 국가 이름의 길이와있는 다음다음 조건에 따라 정렬 필요

  2. 모음의 번호가 동일한 경우

    ,

    • 확인은 최대 길이가 먼저 넣고 있습니다.

    • 길이가 동일하면 상태 의 첫 번째 문자를 기준으로 정렬하십시오.

    • 첫 번째 문자도 같은 경우 목록에있는 발생에 따라 배치하십시오. 여기

는 이름 인쇄 아래 코멘트에 질문으로 코드

Public static void Main(string[] args) 
{ 

    List<ClsState> states = new List<ClsState>(); 
    states.Add(new ClsState("Gujarat")); 
    states.Add(new ClsState("Maharashtra")); 
    states.Add(new ClsState("Punjab")); 
    states.Add(new ClsState("AndhraPradesh")); 
    states.Add(new ClsState("Telengana")); 
    var result = states.OrderBy(a => a.StateName.Length) 
         .ThenBy(a => a.StateName); 

} 
+0

당신 요구는 4 개 수준의 일종을하지만, 단 두 개의 정렬 기준 만 있습니다. –

+1

OrderBy-Comparer (https://code.msdn.microsoft.com/SQL-Ordering-Operators-050af19e)을 사용하고 사용자 지정 비교기를 사용하십시오 (사용자 지정 comarer 클래스에서 논리를 추가하십시오). – sudhAnsu63

+0

In은 잘못된 질문이라고 생각하지 않지만 유스 케이스를 보여주는 샘플 출력을 보는 것이 도움이 될 것입니다. –

답변

1
static void Main(string[] args) 
    { 
     List<ClsState> states = new List<ClsState> 
     { 
      new ClsState("Gujarat"), 
      new ClsState("Maharashtra"), 
      new ClsState("Punjab"), 
      new ClsState("AndhraPradesh"), 
      new ClsState("Telengana"), 
     }; 

     var vowls = new List<char> { 'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y' }; 
     var sorted = states 
      .Select(s => new Tuple<int, ClsState>(s.StateName.ToCharArray().Where(l => vowls.Contains(l)).Count(), s)) 
      .OrderByDescending(i => i.Item1) 
      .ThenByDescending(i => i.Item2.StateName.Length) 
      .ThenBy(i => i.Item2.StateName[0]) 
      .ThenByDescending(i => states.Where(s => s.StateName == i.Item2.StateName).Count()); 
    } 

입니다 :

foreach(var state in sorted) 
    { 
     Console.WriteLine(state.Item2.StateName); 
    } 
+0

작동하지 않습니다 ................ –

+0

정확히 작동하지 않습니다 무엇입니까? 모음 수에 따라 정렬됩니다 (가장 높은 숫자부터 가장 낮은 숫자까지). 길이별로 (가장 길다는 것부터 가장 짧은 것까지). 그런 다음 첫 번째 문자로 (오름차순 : a부터 z까지). 마지막으로 컬렉션에서 몇 번이나 발생합니다. – PiotrWolkowski

+0

해달라고 마음 pls mak 콘솔 화면에 인쇄하려고 ... foreach (정렬 된 var 항목)처럼 { Console.WriteLine (sorted.FirstOrDefault()); } –