我有一个KeyValuePair列表,其值也是列表,例如
List<KeyValuePair<string, List<string>>> ListX = new List<KeyValuePair<string,List<string>>>();
ListX.Add(new KeyValuePair<string,List<string>>("a",list1));
ListX.Add(new KeyValuePair<string,List<string>>("b",list1));
ListX.Add(new KeyValuePair<string,List<string>>("a",list1));`
我希望列表中每个KeyValuePair的键不重复,只有键,我可以在此列表中使用Distinct吗?
例如,我希望列表中包含“a”键的第三项被删除,因为它是重复的。
答案 0 :(得分:2)
var dictionaryX = ListX
.GroupBy(x => x.Key, (x, ys) => ys.First())
.ToDictionary(x => x.Key, x => x.Value);
我不确定这是否是您正在寻找的内容,但它是一个查询,只需为每个重复键获取第一个值,即可将ListX
转换为字典。
答案 1 :(得分:1)
虽然可以使用当前的List
来使其拥有Distinct
个密钥,但我认为适合您的最简单的解决方案是使用Dictionary<string,List<string>>
恰好你需要的东西:
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
dict.Add("a", new List<string>());
dict.Add("b", new List<string>());
dict.Add("a", new List<string>()); //will throw an error
图像:
如果您想要在字典中添加Key
时检查<Key,Value>
是否已存在,只需按ContainsKey
进行检查:
if (dict.ContainsKey(key)) //the key exists
答案 2 :(得分:0)
您可以使用继承自Dictionary<TKey, TValue>
的班级IEnumerable<KeyValuePair<TKey, TValue>>
。它是KeyValuePairs的集合,它只允许使用唯一键。
答案 3 :(得分:0)
你可以使用
Dictionary<TKey, TValue>
其中Tkey和Tvalue是通用数据类型。
例如,它们可以是int,string,另一个字典等。
示例Dictionary<int , string>, Dictionary<int , List<employee>>
等。
在所有这些情况下,键是不同的部分,即不能再次插入相同的键。
你可以使用区别检查密钥是否存在,这样即使你尝试添加相同的密钥也不会发生异常
然而 Distinct仅阻止相同的键值对。
要阻止添加相同的密钥,请使用Enumerable.GroupBy
ListItems.Select(item =>
{
long value;
bool parseSuccess = long.TryParse(item.Key, out value);
return new { Key = value, parseSuccess, item.Value };
})
.Where(parsed => parsed.parseSuccess)
.GroupBy(o => o.Key)
.ToDictionary(e => e.Key, e => e.First().Value)
答案 4 :(得分:0)
List<Dictionary<int, List<int>>> list = new List<Dictionary<int, List<int>>>(); //List with a dictinary that contains a list
int key = Convert.ToInt32(Console.ReadLine()); // Key that you want to check if it exist in the dictinary
int temp_counter = 0;
foreach(Dictionary<Int32,List<int>> dict in list)
{
if(dict.ContainsKey(key))
temp_counter+=temp_counter;
}
if (temp_counter == 0) // key not present in dictinary then add a to the list a dictinary object that contains your list
{
Dictionary<int,List<int>> a = new Dictionary<int,List<int>>();
a.Add(key,new List<int>()); // will contain your list
list.Add(a);
}
检查是否有效