2016-11-16 53 views
-2

如何按以下格式按姓氏对用户列表进行排序?按字母顺序排列的C#列表

first.last

first.mi.last

mylist.Sort(); 

各种各样的名字,那是不是我想做的事情。我是否需要使用RegEx?

+2

是什么在你的名单? –

回答

1

假设你的名字是简单的字符串(和不是名字和姓氏属性的对象)是这样的:

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

你可以这样进行订购:

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

输出:

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 =新清单(); 。我是否需要改变它的定义方式? – Dawn555

+0

@ Dawn555是的。您需要列表的某些类型具有“FirstName”,“LastName”和“MiddleName”属性。字符串类型不适用于此。 – dckuehn

+0

@ Dawn555是的,您应该创建一个具有3个属性的'User'类:'LastName','MiddleName'和'FirstName'。然后你应该创建'List mylist = new List ();' –

0

如果你想在地方排序,尝试specifing的比较器

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

如果mylist包含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)));