我有一个元组列表,每个元组都有一个整数和一个图像,列表有几个具有相同整数值的项目,但是不同的图像,所以我想在列表中获取具有相同整数的项目,然后创建一个列表中相应项目的图像列表。
例如,假设我有 3张图片
imageL1_1 和 imageL1_2 列在同一个整数 1
的列表中imageL2_1 在列表中,其值为 2
Image imageL1_1 = new Image();
imageL1_1.Source = new BitmapImage(new Uri("Resources/image1.png", UriKind.Relative));
Image imageL1_2 = new Image();
imageL1_2.Source = new BitmapImage(new Uri("Resources/image2.png", UriKind.Relative));
Image imageL2_1 = new Image();
imageL2_1.Source = new BitmapImage(new Uri("Resources/image3.png", UriKind.Relative));
List<Tuple<int,Image>> source = new List<Tuple<int,Image>>();
source.Add(new Tuple<int,Image>(1,imageL1_1 ));
source.Add(new Tuple<int,Image>(1,imageL1_2));
source.Add(new Tuple<int,Image>(2,imageL2_1 ));
我想过滤这些项目并创建一个类似于:
的字典List<Image> l1 = new List<Image>();
l1.Add(imageL1_1);
l1.Add(imageL1_2);
List<Image> l2 = new List<Image>();
l2.Add(imageL2_1);
Dictionary<int, List<Image>> dictImages = new Dictionary<int, List<Image>>()
{
{1, l1},
{2, l2}
};
我在尝试:
Dictionary<int, List<Image>> result = new Dictionary<int, List<Image>>();
List<Image> listIm = new List<Image>();
foreach (Tuple<int, Image> diff in temp)
{
//How should I save items until key is different??
if(someCondition)
{
listIm.Add(diff.Item2); //save item on temp list
}
else
{
result.Add(diff.Item1, listIm); //save result on Dictionary
listIm.Clear(); //clean list
}
}
我很难弄清楚要在列表中保存项目还是在字典上保存元素的条件,如何解决?
可以使用LINQ
完成吗?
答案 0 :(得分:4)
试试这个。
Dictionary<int, List<Image>> result =
source.GroupBy(tuple => tuple.Item1, tuple => tuple.Item2)
.ToDictionary(grouping => grouping.Key, grouping => new List<Image>(grouping));
基本上,这会按给定密钥(source
)对tuple.Item1
中的项目列表进行分组,然后将分组转换为Dictionary
。