声明对象列表:
List<object> result = new List<object>();
以及用于存储ID的int列表:
List<int> ids = new List<int>();
我想存储在包含result
对的(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 });
答案 0 :(得分:1)
也许我并不完全理解这个场景,但我怀疑使用以下内容可以达到目的。
List<Dictionary<string, List<int>>>
当密钥不存在时,您可以添加密钥,只需添加密钥即可。
答案 1 :(得分:1)
您可以使用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列表:
var result = descriptionLookup.Select(g => new { pars = g.Key, ids = g.Select(x=> x.Id).ToList() }).ToList():
答案 2 :(得分:1)
下面的程序描述了当前的通用集合类型,如果Key已经存在,也允许添加新值。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
MyProgram p = new MyProgram();
p.Add("First" , 5);
p.Add("Second" , 8);
p.Add("Third" , 9);
p.Add("First" , 6);
p.Add("First" , 7);
p.PrintDictionary();
}
}
public class MyProgram
{
private Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
public void Add(string key, int value)
{
if (dict.ContainsKey(key))
{
dict[key].Add(value);
}
else
{
dict.Add(key, new List<int>() {value});
}
}
public void PrintDictionary()
{
foreach(var keyValue in dict)
{
Console.WriteLine("Key : " + keyValue.Key);
foreach(var val in keyValue.Value)
{
Console.WriteLine(string.Format("\t Value : {0}", val));
}
}
}
}
输出:
关键:首先
Value : 5 Value : 6 Value : 7
关键:第二次
Value : 8
关键:第三次
Value : 9
选中Live Fiddle。