2012-07-09 2 views
-6

가능한 중복은 :
Sort List by occurrence of a word by LINQ C#
복잡한 정렬 목록

나는 여기에 비슷한 질문을 게시하고, 작동하지 않는 대답을 얻었다. 다음은 정렬해야하는 데이터입니다.

ID  Title 
    --- ------ 
    1  JCB Excavator - ECU P/N: 728/35700 
    2  Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899 
    3  Geo Prism 1995 - Geo ABS #16213899 
    4  Geo Prism 1995 - ABS #16213899 
    5  Wie man BBA reman erreicht 
    6  this JCB test JCB 
    7  Ersatz Airbags, Gurtstrammer und Auto Körper Teile 

내 검색 데이터는 "JCB GEO"와 유사합니다. 나는 데이터가 다음과 같이 될 같은 방식으로 정렬하고 싶다.

ID  Title 
    --- ------ 
    2  Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899 
    3  Geo Prism 1995 - Geo ABS #16213899 
    4  Geo Prism 1995 - ABS #16213899 
    6  this JCB test JCB 
    1  JCB Excavator - ECU P/N: 728/35700 
    5  Wie man BBA reman erreicht 
    7  Ersatz Airbags, Gurtstrammer und Auto Körper Teile 

가장 먼저 올 행은 데이터가 최대 시간을 갖는 행이다. 따라서 GEO에 대한 단어는 대부분의 행에서 최대 시간을가집니다. ID 2에는 최대 시간, GEO라는 단어가 있고 다음 행에는 2 개의 Geo 단어가 있습니다.

나는이 질문을 올렸고 아래에서 답변을 얻었지만 작동하지 않습니다.

List<SearchResult> list = new List<SearchResult>() { 
    new SearchResult { Description = "JCB Excavator - ECU P/N: 728/35700" }, 
    new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" }, 
    new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" }, 
    new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" }, 
    new SearchResult { Description = "Wie man BBA reman erreicht" }, 
    new SearchResult { Description = "this test JCB" }, 
    new SearchResult { Description = "Ersatz Airbags, Gurtstrammer und Auto Körper Teile" }    
}; 
var wordsToFind = "Geo JCB".Split(); 
var values = list.Select(x => new { SearchResult = x, Count = x.Description.Split(' ') 
    .Where(c => wordsToFind .Contains(c)).Count() }) 
    .OrderByDesending(x => x.Count) 
    .Select(x => x.SearchResult); 
+3

입니다
그 그 대답을 받아 들일 수 없으며, 당신의 질문에 적극적으로 참여하는 사람들과 대화하여 일하는 답을 얻습니다. 여러 개의 동일한 질문으로 사이트를 오염시키는 것은 갈 길이 아닙니다. – Jon

+0

[원래 질문에 대한 업데이트 된 답변보기] (http://stackoverflow.com/a/11392150/219661) – Jamiec

답변

0

어쩌면 그렇게 할 수 있을까요? 주요 콘솔 프로그램은 내가

static void Main(string[] args) 
     { 
      var list = SearchResult.GetResult(); 
      var wordArray = "Geo,JCB".Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
      list.Sort((a, b) => { 
       int sum1 = 0, sum2=0; 
       foreach (var item in wordArray) 
       { 
        sum1 += Regex.Matches(a.Description, item).Count; 
        sum2 += Regex.Matches(b.Description, item).Count; 
       } 

       if (sum1 < sum2) return 1; 
       else if (sum1 > sum2) return -1; 
       else return 0; 
      }); 
      foreach (var item in list) 
      { 
       Console.WriteLine(item.Description); 
      } 
      Console.ReadKey(); 
     } 

의 SearchResult 클래스를 테스트하는 데 사용 u는 무엇을 요구에 대한 properoutput를 반환

public class SearchResult 
    { 
     public string Description { get; set; } 
     public static List<SearchResult> GetResult() 
     { 
      var list = new List<SearchResult>() 
      { 
       new SearchResult(){Description = "JCB Excavator - ECU P/N: 728/35700"}, 
       new SearchResult(){Description = "Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899"}, 
       new SearchResult(){Description = "Geo Prism 1995 - Geo ABS #16213899"}, 
       new SearchResult(){Description = "Geo Prism 1995 - ABS #16213899"}, 
       new SearchResult(){Description = "Wie man BBA reman erreicht"}, 
       new SearchResult(){Description = "this JCB test JCB"}, 
       new SearchResult(){Description = "Ersatz Airbags, Gurtstrammer und Auto Körper Teile"} 
      }; 
      return list; 
     } 
    } 

... 당신이 대답을 얻었다 경우

Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899 
Geo Prism 1995 - Geo ABS #16213899 
this JCB test JCB 
Geo Prism 1995 - ABS #16213899 
JCB Excavator - ECU P/N: 728/35700 
Ersatz Airbags, Gurtstrammer und Auto Körper Teile 
Wie man BBA reman erreicht 
+0

많은 구문 오류가 발생합니다. 통해 UR VS2010 IDE 코드를 붙여 넣고 실행하십시오 .... 그런 다음 많은 컴파일 오류를 볼 수 있습니다. 제발 봐줘 ​​다시 오류 코드와 함께 나에게 돌아갈 수있는 결과로 나는 단지 ur 코드가 내 요구 사항에 따라 설정 결과를 반환 할 수 있는지 여부를 테스트 할 수 있습니다. 덕분에 – Thomas

+0

sry .. 나는 여기에 코드를 직접 입력하는 습관이있다. 그래서 많은 구문상의 오류가 남는다. 아프지 만 내 ans를 편집한다. –

+0

여전히 같은 오류가있다. 가능하다면 VS2010 IDE에서 ur 코드를 복사하고 컴파일을 시도하면 많은 오류가 발생할 수 있습니다. 덕분에 – Thomas