2016-11-16 12 views
-2

以下の形式でユーザーのリストを姓で並べ替えるにはどうすればよいですか?最初の名前でアルファベット順のC#並べ替えリスト

mylist.Sort(); 

種類first.mi.last

first.last

、それは私が何をしたいのかではありません。どうにかRegExを使う必要がありますか?

+2

var orderedList = list.OrderBy(item => item.Split('.').Last()); 

出力:

var list = new List<string> { "c.a", "a.c" , "b"}; 

あなたは、このようにそれらを注文することができますか? –

答えて

1

あなたの名前は単純な文字列このように、姓と名のプロパティ)でないオブジェクト:あなたのリストには何が

c.a 
b 
a.c 
4

あなたはあなたのユーザーを注文するLinqを使用することができます:あなたが同じ姓を持つ

using System.Linq; 
mylist.OrderBy(x => x.LastName); 

場合は、ミドルネームでユーザーを注文することができます。あなたは同じミドルネームを持っている場合は、最初の名前でユーザーを注文することができます。

mylist.OrderBy(x => x.LastName).ThenBy(x => x.MiddleName).ThenBy(x => x.FirstName); 
+0

私のリストはリストとして定義されています mylist = new List (); 。定義方法を変更する必要がありますか? – Dawn555

+0

@ Dawn555はい。 'FirstName'、' LastName'、および 'MiddleName'という属性を持つ型のリストが必要になります。これに対して文字列型は機能しません。 – dckuehn

+0

@ Dawn555はい、 'LastName'、' MiddleName'、および 'FirstName'の3つのプロパティを持つ' User'クラスを作成する必要があります。そして、あなたは 'List mylist = new List ();'を作成する必要があります。 –

0

あなたの場所にをソートしたい場合は、ケースmylistで比較演算

mylist.Sort((left, right) => string.Compare(left.LastName, right.LastName)); 

をspecifingしようとすると、string項目が含まれている、あなたはLastNameを抽出する必要があります。

private static String LastName(string value) { 
    if (string.IsNullOrEmpty(value)) 
    return value; 

    int p = value.LastIndexOf('.'); 

    return value.SubString(p + 1); 
} 

... 

mylist.Sort((left, right) => string.Compare(LastName(left), LastName(right))); 
関連する問題