2017-12-31 54 views
3

나는 문자열 목록이 있습니다Disctinct

"55002", 
"81512", 
"81612", 
"84515", 
"84615", 
"86358", 
"86358", 
"91128", 
"94002" 

내가 같은 2 개 첫 번째 문자와 같은 마지막 문자가 그 목록 항목에서 찾으려을 중간 문자가 낮은 목록에서 목록을 제거하십시오. 8151281612와 나는 같은이 845158461581512을 제거 할 나는 84515

+0

가장 낮은 중간 문자 - 항목을 비교합니까? 모든? 인접 해 있니? – JohnyL

+0

그래서 결과는 "55002", "81612", "84615", "86358", "91128", "94002"'가 될 것입니까? –

+2

이것은 숙제와 같습니다. – Ivan86

답변

1

이 작업을 시도 할 수 있습니다 :

var g = new string[] {"55002", ...}; 

var t=g.GroupBy(f => f.Substring(0, 2)) 
     .Select(f =>f.OrderByDescending(a =>a).First()); 

결과 :

55002 
91128 
81612 
84615 
86358 
94002 

갱신 :

은 아마 GROUPBY 지난 2 charcters을 mathing도해야한다고 놓쳤다.

그 다음 사건의 경우

시각화를위한
var t=g.GroupBy(f => f.Substring(0, 2)+f.Substring(f.Length-2)) 
     .Select(f =>f.OrderByDescending(a =>a).First()); 

:

이 코드를 보면 :

var g = new string[] {"55002", 
"91128", 
"81512", 
"81712", 
"81612", 
"84516", 
"84216", 
"84615", 
"86358", 
"86358", 
"94002"}; 

    var t = g.GroupBy(f => f.Substring(0, 2) + f.Substring(f.Length - 2)).Select(f => new { key = f.Key, group = f.OrderByDescending(a => a)}); 
    Console.Write(t); 

우리는 "키"로 그룹에려고하고 취할 각 오른쪽 그룹의 첫 번째 상위 그룹 :

+0

이렇게해도 문제는 해결되지 않습니다. 다음 입력을 시도하십시오 : { "81512", "81612", "81613"}. 이것은 81613 만 반환합니다. 81612는 요구 사항에 따라 목록에 있어야합니다. –

+0

@ yildizm85 제 이해에 의하지 않습니다. –

+0

@ yildizm85 그의 데모에 맞춰 2 개의 문자로 그룹화 한 다음 문자의 REST가있는 문자를 삭제합니다. 정렬 할 때 가장 큰 가치가 있습니다. –

0

당신은 이런 식으로 작업을 수행 할 수 있습니다 제거 할 :이 예에서 같은 것

var input = new []{ "1234", "2345" /*...*/}; 
var res = input.GroupBy(x=> x.Substring(0,2)).Select(x=> x.OrderByDescending(y=>y).ToList()).ToList(); 
foreach(var l in res) 
{ 
    l.RemoveAt(l.Count-1); 
} 

사건이 리터럴 위해 마지막 문자열을 제거하지만 다룰 것