gpt4 book ai didi

c# - Dictionary ContainsKey 似乎不适用于 string[] 键

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:21 24 4
gpt4 key购买 nike

我正在尝试拥有一个包含多个字符串键的数据结构。为此,我尝试创建一个包含 string[] 元素的字典。但是 ContainsKey 似乎没有像我预期的那样工作:

Dictionary<string[], int> aaa = new Dictionary<string[], int>();
int aaaCount = 0;
aaa.Add(new string[] { string1, string2 }, aaaCount++);

if (!aaa.ContainsKey(new string[] { string1, string2 }))
{
aaa.Add(new string[] { string1, string2 }, aaaCount++);
}

我看到在执行上面的代码后 aaa 中有两个条目,而我只希望有一个。这是预期的行为吗?如何确保词典中没有重复条目?

注意:我也对列表进行了同样的尝试(列表和结果是相同的——Contains 方法并不真正适用于 string[])

最佳答案

如果你想使用string[]作为 TKey,你应该传递 IEqualityComparer<string[]>constructor of Dictionary .因为 Otherwise Dictionary 使用标准比较 TKey如果是 string[]它只是比较引用因此 string[]是引用类型。您必须自己实现 IEqualityComparer。可以通过以下方式完成:

(这个实现很天真,我提供它只是作为起点)

public class StringArrayComparer : IEqualityComparer<string[]>
{
public bool Equals(string[] left, string[] right)
{
if (ReferenceEquals(left, right))
{
return true;
}

if ((left == null) || (right == null))
{
return false;
}

return left.SequenceEqual(right);
}

public int GetHashCode(string[] obj)
{
return obj.Aggregate(17, (res, item) => unchecked(res * 23 + item.GetHashCode()));
}
}

关于c# - Dictionary ContainsKey 似乎不适用于 string[] 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8304664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com