2012-04-03 134 views
1

嗨快捷的方式我有这样将字符串转换到一个struct

typedef struct 
{ 
    string firstname; 
    string lastname; 
} person; 

作为输入我拿串List<string>的名单像这样

"firstname-lastname" 

什么是最快的方式结构从输入字符串转换为结构人?可以通过使用LINQ来完成吗?

该字符串可能不包含' - ',在这种情况下,sting将保存在person.firstname中,并且person.lastname为空。

希望我很清楚。

非常感谢

+2

最近你问这个问题以及处理速度:http://stackoverflow.com/questions/9997245/fastest-way-to-sort-list-of-strings。您是否对您的应用程序进行了分析以找到需要性能优化的实际位置?优化你认为需要快速的地方可能不是最有效率的。 – mellamokb 2012-04-03 16:35:17

+6

C#没有typedef。 C#标签是否正确? – 2012-04-03 16:35:40

回答

4

我假设你是从C++的到来,因为命名和语法是C++而不是C#。在C#中它会很自然地使用一个类(你也可以使用C#结构 - 只是改变class关键字结构):

class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

与该类您可以使用LINQ创建一个列表:

var people = (
from s in myList 
let split = s.Split('-') 
select new Person 
{ 
    FirstName = split.First(), 
    LastName = split.Skip(1).FirstOrDefault() ?? "" 
}).ToList(); 

let表达式将字符串分割一次,然后重新使用分割的结果。

+0

替换* s.Fist(); * with * split.First(),* – daniloquio 2012-04-03 16:43:22

+0

@daniloquio:谢谢。当然你是对的。 – 2012-04-03 16:44:40

2
var foos = list.Select(x => new PersonStruct() { 
    firstname = x.Split("-")[0], 
    lastname = x.Split("-")[1], 
}).ToList();