2010-03-08 4 views
11

나는 단어의 모음을 가지고, 나는 5 개 문자substring with linq?

제한이 컬렉션에서 컬렉션을 만들 싶어

입력 :

Car 
Collection 
Limited 
stackoverflow 

출력 :

car 
colle 
limit 
stack 

word.Substring (0, 5) throw 예외 (길이)

word. (10)도 좋지 않습니다.

좋은 아이디어가 있습니까 ??

+6

자동차는 길이가 3 자이고 5 자의 SubString을 요구하기 때문에 예외가 발생합니다. –

+0

예, 알고 있습니다. 상황이 훨씬 더 복잡합니다. 그리고 제가 여러분에게 설명한이 복잡한 상황에서 가장 큰 문제가 있습니다. :) – user278618

+0

LINQ만큼 멋있고 (저는 정말로 멋지다고 생각합니다) 어떻게 이것을 더 좋게/더 읽기 좋게 사용하고 있습니까? "구식"foreach 루프보다? – JMarsch

답변

22

이 시나리오의 개체에 대한 LINQ? 다음과 같이 선택을 할 수 있습니다.

from w in words 
select new 
{ 
    Word = (w.Length > 5) ? w.Substring(0, 5) : w 
}; 

기본적으로? :는이 문제를 해결합니다.

var x = new string[] {"car", "Collection", "Limited", "stackoverflow" }; 
var output = x.Select(word => String.Join("", word.Take(5).ToList())); 

변수 "출력은"결과를 포함 : 당신이 할 수있는

+3

'null' 요소에 대한 검사를 추가해야합니다. 즉, 'var subwords = words.Where (w => w! = null). 선택 (w => w.Length> 5? w.Substring (0, 5) : w);'. – jason

7
var words = new [] { "Car", "Collection", "Limited", "stackoverflow" }; 
IEnumerable<string> cropped = words.Select(word => 
            word.Substring(0, Math.Min(5, word.Length))); 
1

뭔가,

string partialText = text.Substring(0, Math.Min(text.Length, 5)); 
0

난 당신이 찾고 있던 해답의 종류는 다음과 같이 할 생각입니다 :

car 
Colle 
Limit 
stack 

nd 문자열 "car"가 예외를 throw하지 않습니다.

그러나 가입하고 확실히 존재하지만 (5),

subString = word.Substring(0,Math.Min(5,word.Length)); 

후자의 코드를 더-사람이 읽을 수있는 경량, 다른 답변에서 제안 된대로 사용하는 것이 일반적으로 훨씬 간단 작품 취하면서 문자열의 길이를 확인하지 않고 처음 5자를 가져 오기 위해 문자열에서 Linq를 사용하는 것에 약간의 차가운 요인.