我有一个带键值对的列表。
var acd = zebra.Where(v => v.Key.StartsWith("alpha"));
KEY,VALUE
我想要的是从具有相同值的多个键中仅获得一个键(任意)。 在这种情况下,1和3具有相同的值。
我想获得如下的新列表:
基本上只有唯一值。任何帮助?
答案 0 :(得分: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 :(得分: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);
答案 2 :(得分: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);