2009-08-31 99 views
3

考虑形状像这样的字符串数组:LINQ:获取每个字符串的第一个字符在阵列

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

要求是从阵列中的每个元件得到第一个字符。

FML

此前曾尝试:

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

问:你会写什么LINQ查询来连接包含字符串数组中的所有名称给首字母缩写?

回答

21

试试这个:

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

,或者,如果你怀疑任何字符串可能是空的,或者这样:

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

如果任何一个字符串是空的,这将引发 – JaredPar 2009-08-31 21:26:44

+1

咩占空字符串为好。在那里,我修好了。 :P – Botz3000 2009-08-31 21:31:41

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

主要生产

FML

7

该解决方案从输出删除它们

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

不会编译,你忘了ToArray() – 2009-08-31 21:28:17

+0

@Stan,谢谢,添加 – JaredPar 2009-08-31 21:32:20

0
​​
+0

使用聚合而不是String.Join或字符串构造函数的奖励点。 – 2009-08-31 21:33:03

+1

我不知道,如果这是值得的奖金点,在这一点的矫枉过正:P – 2009-08-31 21:36:15

+0

这绝对是矫枉过正。 – Shiva 2009-09-01 00:36:24

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

someName.FirstOrDefault(); 
相关问题