2017-11-14 4 views
0

私は学生とのリストを持っていて、アルファベットの最初の生徒のみを取得したいと考えています。アルファベット順にリストのファーストネームのみを取得する方法は?

私の次のコードは、すべての現在の生徒にアルファベット順に表示されますが、最初のものだけが必要です。

for (char letter = 'A'; letter <= 'Z'; letter++) 
{ 
    Console.WriteLine(letter); 

    foreach (var studentName in _students) 
    { 
     if (studentName)     
     { 
      Console.WriteLine(studentName.Lastname + " " + studentName.Firstname);      
     } 
    } 
} 
+2

を予想される結果や[mcve]に欠けているものなど、いくつかの例を含めることができます。 –

+0

'_students'リストのタイプは?あなたはおそらくリストを並べ替えることができます。 –

+1

@MarkBaijensは 'Lastname'と' Firstname'プロパティを持つクラスであると思われますので、単純な 'OrderBy'がそのトリックを行うべきです。 –

答えて

0

あなた_studentsList<String>であれば、これはソートされたリスト内最初の1を返します。

student1 = _students.sort()[0] 

、プロパティList<Student>によってソートする(姓で並べ替え)する場合:

List<Student> sortedList = _students.OrderBy(s=>s.FirstName).ToList(); 

を今ypuは_sortedList[0]で最初のものを得ることができます。


もうアルファベットのループは必要ありません。あなたは、このようにフィルタリングすることができ、各文字の最初の学生の場合

_students = _students.OrderBy(s=>s.FirstName).ToList(); // sorting and saving 
_students.ForEach(s => Console.WriteLine(s.FirstName + " " + s.LastName)); // printing each element 

_students.Where(s => searchList.Any(s=>s.StartsWith(letter)))[0]; 

をお手紙にこれを書く は、このコードはアルファベット順にすべての学生を印刷します-loopと最初のすべてが返されます。 nullを注意してください。[0]の結果がない場合は例外がスローされます。

+0

だから私はこれをどこに置く必要がありますか?ループのように? –

+0

もうアルファベットループは必要ありません。 '_students = _students.OrderBy(s => s.FirstName +" "+ s.LastName).ToList();'はそれらをアルファベット順に持ちます。だから、あなたはそれをリストして印刷するだけで反復する必要があります。あなたは 'Console.WriteLine(_students)'またはこれを使うことができます: '_students.ForEach(s => Console.WriteLine(s.FirstName +" "+ s.LastName));' – LenglBoy

+0

@Nathalieは更新された答えを確認します。 – LenglBoy

2

あなたはソートされた列挙を作成するためのLINQを使用することができます。これは-Zは、発音区別符号を無視して学生をソートします

var sortedStudents = _students.OrderBy(s => s.LastName, StringComparer.InvariantCultureIgnoreCase).ThenBy(s => s.FirstName, StringComparer.InvariantCultureIgnoreCase); 

その後、あなたは、単にすべてを印刷し、それを反復処理することができます

foreach (var student in sortedStudents) 
{ 
    Console.WriteLine(student.LastName + " " + student.FirstName); 
} 

それとも、最初の1を取る:

var firstStudent = sortedStudents.FirstOrDefault(); // returns the first student or null. 

そして、もう一つの文の最後に、すべて:

var firstStudent = _students.OrderBy(s => s.LastName, StringComparer.InvariantCultureIgnoreCase).ThenBy(s => s.FirstName, StringComparer.InvariantCultureIgnoreCase).FirstOrDefault(); 
+1

'ThenBy'は、' Lastname'と 'Firstname'を連結するよりも少し清潔です。 –

+0

@Manfred良い点!更新された:-) – john

+0

@john私のリストの最後の生徒を知りたい場合は、どんなアイディアですか? –

関連する問題