如何防止c#.net中字典中的重复值

时间:2015-06-01 10:39:56

标签: c# .net

我有字典,其中值是重复的。如何防止字典中的重复?以下是我的代码

private class GcellGtrx
{
    public Gcell Gcell { get; set; }
    public Gtrx Gtrx { get; set; }
}
    private readonly Dictionary<int, GcellGtrx> _dictionary = new Dictionary<int, GcellGtrx>();

_dictionary.Add(gcell.CellId, gcellGtrx);

4 个答案:

答案 0 :(得分:7)

要检查重复键,您可以使用:

dictionary.ContainsKey(gcell.CellId);

并检查重复值,您可以使用:

dictionary.ContainsValue(gcellGtrx);

答案 1 :(得分:2)

如果您可以接受扫描整个字典中可能重复的开销,那么此代码将检查字典中是否存在现有值:

dictionary.ContainsValue(gcellGtrx);

如果你不能接受,你应该:

  • 以相反的顺序创建一个包含两种类型的字典,基本上是从值到键的字典
  • 在词典中创建值的哈希集

然后,它将与您在普通字典上进行类似的查找,以查看该值是否已存在。

即。你可以这样做:

private readonly Dictionary<int, GcellGtrx> _dictionary = new Dictionary<int, GcellGtrx>();
private readonly Dictionary<GcellGtrx, int> _reverseDictionary = new Dictionary<GcellGtrx, int>();

if (!_reverseDictionary.ContainsKey(gcellGtrx))
{
    _dictionary.Add(gcell.CellId, gcellGtrx);
    _reverseDictionary.Add(gcellGtrx, gcell.CellId);
}

答案 2 :(得分:1)

您可以在添加到词典之前检查重复值:

if (!_dictionary.ContainsValue(gcellGtrx))
    _dictionary.Add(gcell.CellId, gcellGtrx);

<强>更新

我感谢@Lasse V. Karlsen编辑了我的回答,他提醒我,我误解了这个问题。

答案 3 :(得分:1)

或者

(A*)*

这将在字典中包含最后一个gcellGtrx。

OR

_dictionary[gcell.CellId] = gcellGtrx;

这会将第一个gcellGtrx保留在字典中。