2012-06-06 3 views
0

У меня есть список acd с парой значений ключа.Группа по списку и возврату Top 1 строка

var acd = zebra.Where(v => v.Key.StartsWith("alpha")); 

KEY, VALUE

  1. alphaABC, TOP323
  2. alphaBCD, BIG456
  3. alphaDEF, TOP323

Что я хотел бы, чтобы получить только один ключ (любой) из нескольких ключей, которые имеют одинаковые значения. В этом случае 1 и 3 имеют одинаковые значения.

Я хотел бы получить новый список, как показано ниже:

  1. alphaABC, TOP323
  2. alphaBCD, только BIG456

В основном уникальные значения. Любая помощь ?

+0

Вы всегда можете использовать 'HashSet ' как помогающая структуру данных, перебирать свою коллекцию и попробуйте добавить каждый ключ к HashSet, который допускает только один экземпляр каждого 'T' – YavgenyP

ответ

2
var items = zebra 
.Where(v => v.Key.StartsWith("alpha")) 
.GroupBy(pair => pair.Value) 
.Select(group => group.First()) 
.ToArray(); 

foreach(var item in items) 
    Console.WriteLine("{0}, {1}", item.Key, item.Value); 
+0

Только то, что я хочу. Благодаря !! – Nanu

3
 List<KeyValuePair<string, string>> data = new List<KeyValuePair<string, string>>() 
{ new KeyValuePair<string, string>("ABC", "TOP323"), 
new KeyValuePair<string, string>("BCD", "BIG456"), 
new KeyValuePair<string, string>("DEF", "TOP323") }; 

     var result = (from d in data 
        group d by d.Value 
        into g 
        select new 
           { 
            row = g.FirstOrDefault() 
           }).ToList(); 
+1

Или с большей добротой лямбда: var result = data.GroupBy (x => x.Value). Выберите (x => x.FirstOrDefault()); – PMontgomery

+1

lambda junky :) –

0

Используйте Dictionary<TKey,TValue>

var dict = new Dictionary<string,string>(zebra.Count); 
foreach (KeyValuePair pair in zebra) { 
    if (!dict.ContainsKey(pair.Value)) { 
     dict.Add(pair.Value, pair.Key); 
    } 
} 

Обратите внимание, что мы инвертировать значение ключа и значения здесь. Мы используем pair.Value как ключ в dict, так как нам нужны уникальные значения.

В качестве альтернативы вы можете также объявить словарь, как Dictionary<string,KeyValuePair<string,string>> и добавить, как это

dict.Add(pair.Value, pair); 
Смежные вопросы