使用 Lambda/Linq 获取集合中按字母顺序排列的项目列表?

发布于 2024-08-19 10:31:44 字数 348 浏览 2 评论 0原文

我有一个对象列表。每个对象都包含一个名为“DisplayName”的属性。

我想创建另一个字符串对象列表,其中每个字符串代表初始列表中所有对象的 DisplayName 属性中的第一个字母或字符(可以是数字),并且我希望该列表是不同的。

例如,如果我的列表包含以下三个对象:

(1) DisplayName = 'Anthony' (2) 显示名称 = '丹尼斯' (3) DisplayName = 'John'

我想创建另一个包含以下三个字符串的列表:

(1) 'A' (2)“D” (3) 'J'

知道如何使用 lambda 表达式或 linq 通过最少的编码来做到这一点吗?

I have a list of objects. Each object contains a property called 'DisplayName'.

I want to create another list of string objects, where each string represents the first letter or character (could be a number) in the DisplayName property for all objects in the initial list, and I want the list to be distinct.

So, for example, if my list contained the following three objects:

(1) DisplayName = 'Anthony'
(2) DisplayName = 'Dennis'
(3) DisplayName = 'John'

I would want to create another list containing the following three strings:

(1) 'A'
(2) 'D'
(3) 'J'

Any idea how to do this with minimal coding using lambda expressions or linq?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甲如呢乙后呢 2024-08-26 10:31:44

像这样:

list.Select(o => o.DisplayName[0].ToString())
    .Where(s => Char.IsLetter(s, 0))
    .Distinct().ToList();

已编辑

Like this:

list.Select(o => o.DisplayName[0].ToString())
    .Where(s => Char.IsLetter(s, 0))
    .Distinct().ToList();

Edited

浮生面具三千个 2024-08-26 10:31:44
List<myObject> mylist = new List<myObject>();
//populate list
List<string> myStringList = myList
    .Select(x => x.DisplayName.Substring(0,1))
    .Distinct()
    .OrderBy(y => y);

在上面的代码中,Select(及其 lambda)仅返回对象 x 的显示名称中的第一个字符。这将创建一个 string 类型的 IEnumerable,然后将其传递给 Distinct()。这可确保列表中只有唯一的项目。最后,OrderBy 确保您的项目按字母顺序排序。

请注意,如果列表中的每个对象都具有不同类型,则您将无法仅调用 x.DisplayName。在这种情况下,我将创建一个接口,可能称为 IDisplayName,它实现 DisplayName。那么你应该能够使用 x =>; ((IDisplayName)x).DisplayName.Substring(0,1) 在您的 lambda 中。

List<myObject> mylist = new List<myObject>();
//populate list
List<string> myStringList = myList
    .Select(x => x.DisplayName.Substring(0,1))
    .Distinct()
    .OrderBy(y => y);

In the above code, Select (with it's lambda) returns only the first character from the display name of object x. This creates an IEnumerable of type string, which is then passed to Distinct(). This makes sure you have only unique items in the list. Finally, OrderBy makes sure your items are sorted alphabetically.

Note, if each of the objects in the list are of different types, you won't be able to just call x.DisplayName. In that case, I would create an interface, possibly called IDisplayName, which implements DisplayName. Then you should be able to use x => ((IDisplayName)x).DisplayName.Substring(0,1) within your lambda.

时光沙漏 2024-08-26 10:31:44

或者用查询表示法:

var stringList = (from a in objectList 
                      select a.DisplayName.Substring(0,1)).Distinct();

or in query notation:

var stringList = (from a in objectList 
                      select a.DisplayName.Substring(0,1)).Distinct();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文