2012-04-03 19 views
1

Hallo Ich habe eine Struktur wie dieseSchneller Weg, um eine Zeichenfolge in einem struct

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

Als Eingabe Ich nehme eine Liste von Strings List<string> wie diese

"firstname-lastname" 

zu konvertieren Was ist der schnellste Weg von der Eingabezeichenfolge in die struct-Person konvertieren? kann es mit LINQ getan werden?

Die Zeichenfolge enthält möglicherweise kein '-'. In diesem Fall wird der Stachel in person.firstname gespeichert und der person.lastname ist leer.

Ich hoffe, ich war klar.

Vielen Dank

+2

Sie haben diese Frage vor kurzem auch im Zusammenhang mit der Geschwindigkeit gestellt: http://stackoverflow.com/questions/9997245/fastest-way-to-sort-list-of-strings. Haben Sie Ihre Anwendung so profiliert, dass sie die tatsächlichen Bereiche enthält, in denen Leistungsoptimierung erforderlich ist? Es ist vielleicht nicht so produktiv, die Orte zu optimieren, an denen Sie * schnell * sein müssen. – mellamokb

+6

C# hat keine typedef. Ist das C# -Tag korrekt? –

Antwort

4

Ich gehe davon aus, dass Sie von C++ kommen, weil die Namensgebung und die Syntax ist C++ und C# nicht. In C# wäre es natürlich, eine Klasse zu verwenden (Sie können auch eine C# struct verwenden - nur die Klasse Schlüsselwort ändern struct):

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

Mit dieser Klasse können Sie Linq verwenden, um eine Liste zu erstellen:

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

Der Ausdruck let bewirkt, dass die Zeichenfolge einmal geteilt wird und das Ergebnis der Teilung erneut verwendet wird.

+0

ersetzt * s.Fist(); * mit * split.First(), * – daniloquio

+0

@ daniloquio: Danke. Natürlich hast du recht. –

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