请考虑以下事项:
词典:
Dictionary<int, int> ProductIdQuantityDictionary = new Dictionary<int, int>();
填写:
1, 54
2, 78
3, 5
6, 13
( key 的ProductId和值的数量填充。)
我也有list<int>
。
列表:
List<int> CategoryIdList = new List<int>();
填写:
1
5
6
7
(填写CategoryId。)
Psuedo代码应该是这样的:
Dictionary<CategoryIdList, ProductIdQuantityDictionary> MergedDictionary = new Dictionary<CategoryIdList, ProductIdQuantityDictionary>();
结果如下:
1, 1, 54
5, 2, 78
6, 3, 5
7, 6, 13
我听说过Tuple
,但我不知道如何实施。如果可能的话,是否有一种简单的方法来填充超过2个值的字典?
注意:问题中最重要的部分:如何在新Dictionary
中合并List
和Dictinary
。
答案 0 :(得分:4)
您可以使用Zip
方法:
var merged = ProductIdQuantityDictionary.Zip(CategoryIdList, (pair, id) =>
new
{
CategoryId = id,
ProductId = pair.Key,
Quantity = pair.Value
})
.ToDictionary(x => x.CategoryId );
Dictionary<int,int>
给出了不确定的顺序。由于缺少Category
和Product
与您的问题相关的解释,这是我能提出的最接近的建议。
<强>更新强>
您的问题和伪代码不清楚。我不认为你想要
Dictionary<List<int>, Dictionary<int,int>>
我认为你正在寻找更接近
的东西Dictionary<int, <int, int>>
其中<int, int>
是包含ProductId
和Quantity
的对象。
以上答案为您提供
Dictionary<int, <int, int, int>>
,其中
<int, int, int>
是一个具有以下结构的匿名对象:
{
int CategoryId { get; set; }
int ProductId { get; set; }
int Quantity { get; set; }
}
答案 1 :(得分:2)
//Dictionary<catId, Dictionary<prodId, quantity>>
Dictionary<int, Dictionary<int, int>>
答案 2 :(得分:1)
Dictionary可以将集合作为值,包括另一个字典。
Dictionary<int, List<int>>
Dictionary<int, Dictionary<int, int>>
或者,Tuple本质上是一个小型的类型 - 你所拥有的只是一些属性。下行是你如何访问它们 - 没有这样命名可能会令人困惑。
Tuple<int, int, int> myTuple = new Tuple<int, int, int>(1, 2, 3);
DoWork(myTuple.Item1, myTuple.Item2, myTuple.Item3);
如果你去了Tuple路线,你可以在一个集合中使用它(包括字典)
List<Tuple<int, int, int>> myTuples = new List<Tuple<int, int, int>>();
foreach(var myTuple in myTuples)
DoWork(myTuple.Item1, myTuple.Item2, myTuple.Item3);
答案 3 :(得分:1)
这可能看起来很有吸引力,简洁明了。您可以根据需要将尽可能多的属性链接到产品。但是,也许,您可以考虑将其作为属性为Product
的类{。}}。
struct ProductAttributes
{
public int Quantity;
public List<int>Categories;
}
Dictionary<int ProductId, ProductAttributes> = new Dictionary<Int, ProductAttributes>();
或者您可以通过执行类似(伪代码)的事情来发疯:Dict<Dict<Dict<KeyValuePair<List<Dict<T, T>>, T>>>> = new Dict<Dict<Dict<KeyValuePair<List<Dict<T, T>>, T>>>>();
如果您愿意,可以将所有产品属性嵌套在单行中:D但如果您喜欢单行,则元组可能是什么你寻求:http://msdn.microsoft.com/en-us/library/system.tuple.aspx
答案 4 :(得分:1)
var combined = new List<Tuple<int,int.int>>()
for(int i=0; i<categoryList.Count(); i++)
{
var e = categoryList[i];
var dicKeys = ProductIdQuantityDictionary.Keys;
if(i < dicKeys.Count()){
combined.Add(new Tuple(e,dicKeys[i],ProductIdQuantityDictionary[dicKeys[i]]))
}
else
{
combined.Add(new Tuple(e,0,0))
}
}
稍后您可以将其作为
进行访问 foreach(var t in Combined)
{
//t.Item1;
//t.Item2;
//t.Item3;
}