0

我有一个带有键值对的列表 acd。

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

核心价值

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

我想要的是从具有相同值的多个键中仅获取一个键(任意)。在这种情况下,1 和 3 具有相同的值。

我想得到一个如下的新列表:

  1. alphaABC, TOP323
  2. alphaBCD, BIG456

基本上只有唯一值。任何帮助?

4

3 回答 3

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();
于 2012-06-06T19:24:47.147 回答
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);
于 2012-06-06T22:09:16.830 回答
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);
于 2012-06-06T20:04:57.470 回答