首页 > 解决方案 > 以列表作为对象属性的对象列表

问题描述

声明对象列表:

List<object> result = new List<object>();

以及用于存储 id 的 int 列表:

List<int> ids = new List<int>();

我想存储在result包含 pair 的对象中(string, list of int)

它适用于这对(string, int),但我希望当有 2 个相同的字符串只有一个对象并且 int 值存储在列表中时。

例如:{pars = "xxx", id = 1} , {pars = "xxx", id = 2}变成{pars = "xxx", id = (1,2 )}

为了执行初始功能,我使用了foreach一个对象,从中获取字符串(pars)和 id:

    foreach (dataBinding in myData)
    {
        var x = string.Join(" ", dataBinding.Params.Select(p => p.myDescription));

        result.Add(new { pars = x, id = dataBinding.Id });

    }

中可能有更多字符串Params,这就是我使用连接的原因。

因为它在这里,它通过创建具有表单的对象来工作(string, int)。但我的目标是做到这一点(string, list of int),如果有两个具有相同字符串的对象像我之前写的那样将它们组合起来。

我尝试将ids列表添加为对象的第二个属性,但可能我没有正确执行。

 result.Add(new { pars = x, ids = dataBinding.Id });

标签: c#stringlistobject

解决方案


您可以使用 LINQ,尤其是GroupBy

Dictionary<string, List<int>> descriptionIDs = myData
    .GroupBy(x => x.myDescription)
    .ToDictionary(g => g.Key, g => g.Select(x => x.Id).ToList());

现在你甚至有一个字典,而不仅仅是一个List<object>包含匿名类型的奇怪的。

正如有人提到的,您也可以使用ToLookup我也喜欢的:

var descriptionLookup = myData.ToLookup(x => x.myDescription);

现在您可以轻松获取 ID-List:

var result = descriptionLookup.Select(g => new { pars = g.Key, ids = g.Select(x=> x.Id).ToList() }).ToList():

推荐阅读