如何将名字首字母分组?

时间:2019-02-06 18:35:27

标签: c# linq

public class ContactModel
{
    public string PeopleName { get; set; }
    public string PhoneNumber { get; set; }
}

List<ContactModel> contacts =new List<ContactModel>();

Contacts.Add(new ContactModel{PeopleName="Vijay Singh",PhoneNumber="9878987869"});
Contacts.Add(new ContactModel{PeopleName="Anuradha Patel",PhoneNumber="9878987869"});
Contacts.Add(new ContactModel{PeopleName="Binay Dixit",PhoneNumber="9878987869"});

我想在联系人姓名首字母上获得List<char>,例如列表数据=> V,A,B

如何通过LINQ在C#中获得它?

3 个答案:

答案 0 :(得分:1)

只需执行以下操作:

var charList = contacts.Select(c => c.PeopleName.First()).ToList();

如果您需要第一个字符列表Distinct,请执行以下操作:

var charList = contacts.Select(c => c.PeopleName.First()).Distinct().ToList();

答案 1 :(得分:0)

使用LINQ的group ... by运算符(或GroupBy()方法)操作集合,并使用ToDictionary()IEnumerable<T>转换为Dictionaty<T1, T2>和{ {1}}方法,该方法接受一个ToList()并返回一个“列表:

LINQ运算符:

IEnumerable<T>

LINQ方法:

Dictionary<char, List<ContactModel>> = (from contact in Contacts
                                   group contact by contact.PeopleName[0])
                                   ).ToDictionary(g => g.Key, g => g.ToList());

答案 2 :(得分:0)

不清楚是否需要分组还是只需要首字符列表。

分组依据 如果您要根据“第一个字符”进行分组,则可以执行以下操作。

var result = contacts.GroupBy(x=>x.PeopleName.First());

您的输出如下。

enter image description here

如果您希望不区分大小写地执行相同操作,则可以

var result = contacts.GroupBy(x=>x.PeopleName.First().ToString(),StringComparer.InvariantCultureIgnoreCase);

如果仅在查找第一个字符列表,则可以执行以下操作。

var result = contacts.GroupBy(x=>x.PeopleName.First()).Select(x=>x.Key);

由于您是按“首字母”分组的,因此重复的键将不存在,或者消除了一些注释中所要求的区别。 样本输出,

enter image description here

相关问题