c# - 以列表作为对象属性的对象列表
问题描述
声明对象列表:
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 });
解决方案
您可以使用 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():
推荐阅读
- opencv - 如何使用鱼眼相机参数解决 PnP?
- python - NodeJs:获取 python-shell 的输出以发送回客户端
- linux - 在信号处理程序中通知父进程的安全方法是什么?
- powerbi - 如何使用 DAX 对多列进行分组并计算特定列中的行数?
- kotlin - 有没有办法用 bytebuddy 在 kotlin 中动态实现 API 接口类?(混合模式)
- c# - Razor View Html 表格布局
- javascript - 将字符串转换为 JavaScript 数组
- forms - 我如何通过 url 发送表单提交
- javascript - 像 Basecamp 这样的自动完成功能?
- kubernetes - 裸机 Kubernetes 服务之间外部负载平衡的最佳实践