要区分的 KeyValuePair 列表

List of KeyValuePair to be Distinct

我有一个 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" 键的第三项,因为它是重复的。

您可以使用继承自 IEnumerable<KeyValuePair<TKey, TValue>> 的 class Dictionary<TKey, TValue>。它是 KeyValuePairs 的集合,只允许唯一键。

你可以使用

Dictionary<TKey, TValue>   

其中 Tkey 和 Tvalue 是通用数据类型。

例如,它们可以是 int、string、另一个字典等

例子Dictionary<int , string>, Dictionary<int , List<employee>>

在所有这些情况下,密钥是不同的部分,即无法再次插入相同的密钥。

您可以使用 Distinct 检查密钥是否存在,这样即使您尝试添加相同的密钥也不会发生异常

但是 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)

虽然可以使用您当前的 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,Value> 时需要检查 Key 是否已经存在,只需检查 ContainsKey:

if (dict.ContainsKey(key)) //the key exists
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);
}

检查这是否有效

var dictionaryX = ListX
    .GroupBy(x => x.Key, (x, ys) => ys.First())
    .ToDictionary(x => x.Key, x => x.Value);

我不确定这是否是您要查找的内容,但它是一个查询,它将通过仅获取每个重复键的第一个值将 ListX 转换为字典。