2011-05-26 70 views
1

我有一个以下模式的字符串列表:“name \ middleName”。 什么是最好的方式变成一个列表,其中所有的元素只是“名称”? (即分割字符串,只留下了“名”的一部分)操纵列表中的元素-c#

感谢, 李

回答

5
List<string> originalList = ... 
List<string> newList = originalList.Select(s => s.Split('\\')[0]).ToList() 
+1

您可能是指'[0]'来获取'name'部分。 – 2011-05-26 16:22:32

+0

实际上应该是元素[0],但+1是一个很好的解决方案。编辑:艾哈迈德击败了我。 :) – Rohrbs 2011-05-26 16:23:06

+0

噢,因为某种原因,我想这个名字是在'\\'之后的。现在修复 – 2011-05-26 16:24:21

0
//your list of strings in format (name\middleName) 
List<string> list; 
List<string> newList; 

foreach(string item in list) 
    newList.Add(item.Substring(0, item.IndexOf("\\"))); 

这将使你的字符串列表的副本到一个新的格式像你想。

+0

不认为你可以像这样改变foreach中的项目。 – Eric 2011-05-26 16:23:12

+0

@Eric我在发布之前已将其更改为添加到新列表中。 – Chad 2011-05-26 16:24:10

+0

事情发生很快,出现新的问题:) – Eric 2011-05-26 16:29:24

0

Tokenize“/”并将第一个字符串分配给名称变量。 或者只是将所有这些字符串循环到列表中,并且在循环内对字符串长度进行循环,将字符串变为变量并在到达“/”时退出并将其存储为名称。

4
List<string> original = ... 
List<string> nameOnly = original.ConvertAll(s => s.Substring(0, s.IndexOf('\\'))); 

如果有可能,有可能无法在原始列表的一些元素\字符,那么你就需要一个额外的检查,以避免例外:

List<string> nameOnly = original.ConvertAll(s => { 
                int i = s.IndexOf('\\'); 
                return (i == -1) 
                 ? s 
                 : s.Substring(0, i); 
               }); 
0

下面是正则表达式的解决方案你没有创建一个新的列表。

for(int i = 0; i < list.count; i++) 
{ 
    list[i] = Regex.Match(List[i],@"^\w+").value  
}