过滤List <tuple <int,image>&gt;中的重复(按整数)项目并创建一个Dictionary <int,list <image =“”>&gt; C#

时间:2017-02-06 02:11:46

标签: c# linq list dictionary

我有一个元组列表,每个元组都有一个整数和一个图像,列表有几个具有相同整数值的项目,但是不同的图像,所以我想在列表中获取具有相同整数的项目,然后创建一个列表中相应项目的图像列表。

例如,假设我有 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完成吗?

1 个答案:

答案 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