2010-03-08 38 views
11

Kelimelerin koleksiyonu var ve ben 5 karaktersubstring?

sınırlı bu koleksiyondan koleksiyonu oluşturmak istiyorum

Girdi:

Car 
Collection 
Limited 
stackoverflow 

Çıktı:

car 
colle 
limit 
stack 

word.Substring (0, 5) istisnayı (uzunluk)

word.Take (10) iyi bir fikir değildir ...

Herhangi bir iyi fikir? Bu senaryo için nesnelere

+6

Sen istisna olsun. –

+0

evet, biliyorum. Durum çok daha karmaşık olduğunu ve ben hangi Bu sizin için açıklanan ettik olan bir en büyük sorun olan bu karmaşık bir durum :) – user278618

+0

LINQ (ve gerçekten harika olduğunu düşünüyorum) olduğu kadar serin, bu daha iyi/daha okunabilir için kullanmaya nasıl "eski moda" foreach döngüsünden daha mı? – JMarsch

cevap

22

LINQ? Bunu aşağıdaki gibi yapabilirsiniz:

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

Esasen:?

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

değişkeni "çıkış" sonucunu içerir: Yapabileceğiniz

+3

'null' öğeleri için bir kontrol eklemelisiniz. Bu ', var alt-kelimeler = words.Where olan (=> w.Length ağırlık> 5 w.Substring (0, 5): a) .Select (=> a = boş!)'. – jason

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

şey,

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

ben aradığınız cevap tür şu şekilde görünecektir inanmak : Biri (%)> () "araba" dizesi bir istisna atmaz.

Ama katıl ve kesinlikle orada olsa (5),

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

ikincisi kodu daha okunabilir ve hafiftir, başka bir yanıt dile getirildiği gibi o, kullanımı genellikle çok daha basittir, işleri al ederken dizinin uzunluğunu kontrol etmek zorunda kalmadan, ilk beş karakteri almak için bir dizgede Linq kullanmanın bir hafiflik faktörüdür. Araç sadece 3 karakter uzunluğunda olduğunu ve 5 karakterden oluşan bir alt dize için soruyorsunuz çünkü

İlgili konular