2017-02-06 1 views
0

У меня есть список кортежей, каждый кортеж имеет целое число и изображение, в списке есть несколько элементов с одно и то же целочисленное значение, но отличное изображение, поэтому я хочу получить элементы в списке с одним и тем же целым числом, а затем создать список изображений из их соответствующего элемента в списке.Фильтровать повторяющиеся (по целому) элементы в списке <Tuple <int,Image>> и создать словарь <int, List <Image>> C#

Например предположим, у меня 3 изображения

imageL1_1 и imageL1_2 находятся в списке с таким же целым числом

imageL2_1 находится в списке со значением

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?

ответ

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.

+0

Интересное решение, поэтому группировка содержит все изображения с одним и тем же ключом, которые были сгруппированы, правильно? – cMinor

+0

Это правильно. –

 Смежные вопросы

  • Нет связанных вопросов^_^