返回字符串作为属性在自定义对象列表中出现的次数

本文关键字:列表 对象 字符串 属性 自定义 返回 | 更新日期: 2023-09-27 18:09:22

我试图返回一个列表的次数属性有一个值集。

我试图在不硬编码要查找的值的情况下做到这一点,所以如果后端发生了变化,我将不必添加新行代码。

目前我有它的工作,但我已经手动设置的值。

listCounts.Add(testList.Count(item => item.title == "Blah"));
listCounts.Add(testList.Count(item => item.title == null));
listCounts.Add(testListt.Count(item => item.title == "test"));
listCounts.Add(testList.Count(item => item.title == "Blarg"));

这工作目前,但如果有任何变化,我将不得不进入并作出改变的代码,这是我试图避免

返回字符串作为属性在自定义对象列表中出现的次数

这取决于你真正想做什么。看起来你想要每个键(标题)的计数?

一种方法是按标题分组来给出计数,例如

var listCounts = testList.GroupBy(item => item.title);

作为使用这个的一个例子:

    class Item
    {
        public string title;
    }
    static void Main(string[] args)
    {
        var testList = new List<Item>
        {
            new Item { title = "Blah" },
            new Item { title = "Blah" },
            new Item { title = "Blah" },
            new Item { title = null },
            new Item { title = null },
            new Item { title = "test" },
            new Item { title = "test" },
            new Item { title = "test" },
            new Item { title = "test" }
        };

        var listCounts = testList.GroupBy(item => item.title);
        foreach (var count in listCounts)
        {
            Console.WriteLine("{0}: {1}", count.Key ?? string.Empty, count.Count());
        }
        Console.ReadKey();
    }

缺点是你每次都得到计数——就像我说的,这取决于你想要达到的目标。一个简单的更改将使其成为dictionary (string, int),其中每个标题将是一个键,值将是标题出现的次数。

编辑

要使用字典,将listCounts行更改为:

var listCounts = testList.GroupBy(t => t.title).ToDictionary(i => i.Key ?? string.Empty, i => i.Count()); 

(注意键不能为空,因此i.Key ?? string.Empty解决方案应该可以满足您的目的)

我们不知道你的后端是什么,但似乎你需要从中检索值。

//string[] myStrings = new string[] { "Blah", null, "test", "Blarg" };
string[] myStrings = _backEnd.RetrieveValues();
listCounts.Add(testList.Count(item => myStrings.Contains(item)));