2009-08-31 3 views
3

Tenir compte d'un tableau de chaînes en forme comme ceci:LINQ: Obtenez le premier caractère de chaque chaîne dans un tableau

string[] someName = new string[] { "First", "MiddleName", "LastName" }; 

L'exigence est d'obtenir le premier caractère de chaque élément du tableau.

-à-dire

FML

Précédemment ont essayé:

string initials = string.Concat(someName.Select(x => x[0])); 

Question: Quelle requête LINQ vous écrirais concaténer tous le nom contenu dans le tableau de chaînes à donner les initiales?

Répondre

21

essayez ceci:

string shortName = new string(someName.Select(s => s[0]).ToArray()); 

ou, si vous pensez que l'une des chaînes peut être vide ou si:

string shortName = new string(someName.Where(s => !string.IsNullOrEmpty(s)) 
             .Select(s => s[0]).ToArray()); 
+2

Si l'une des chaînes sont vides, cela jette – JaredPar

+1

Meh. Là, je l'ai réparé. : P – Botz3000

6
string[] someName = new string[] { "First", "MiddleName", "LastName" }; 
    String initials = String.Join(".",someName.Select(x => x[0].ToString()).ToArray()); 

Produit

FML

7

Cette solution représente pour les chaînes vides et en les retirant de la sortie

var shortName = new string(
    someName 
    .Where(s => !String.IsNullOrEmpty(s)) 
    .Select(s => s[0]) 
    .ToArray()); 
+1

qui ne compilera pas, vous avez oublié ToArray() –

+0

@Stan, merci, ajouté – JaredPar

0
string initials = someName.Where(s => !string.IsNullOrEmpty(s)) 
          .Aggregate("", (xs, x) => xs + x.First()); 
+0

Points de bonus pour utiliser Aggregate au lieu de String.Join ou un constructeur de chaîne. –

+1

Je ne sais pas si c'est des points de bonus dignes, son genre d'overkill à ce stade: P –

+0

Ceci est définitivement exagéré. – Shiva

-2
string[] someName = new string[] { "First", "MiddleName", "LastName" }; 

someName.FirstOrDefault(); 
Questions connexes