独特的配对系列

时间:2014-11-27 16:33:12

标签: c# .net collections

我想在集合中存储两个字符串,但组合应该是唯一的,例如

'1','2'
'2','1'
'1','2' -> not allowed
'2','3'

如果我希望两个字符串都是键,我应该使用哪个集合?

4 个答案:

答案 0 :(得分:4)

使用HashSet的{​​{1}}。

例如:

KeyValuePair<String, String>

这将只在集合中产生一个条目。

供参考:

KeyValuePair Class

HashSet Class

答案 1 :(得分:3)

使用自定义HashSet<CustomObject>IEqualityComparer。比较器确保不允许任何条目具有重复值。我刚刚编写了一个示例实现,并根据您的方便进行调整。

HashSet<CustomObject> x = new HashSet<CustomObject>(new XE());

public class CustomObjectEqualityComparer : IEqualityComparer<CustomObject>
{
    public bool Equals(CustomObject x, CustomObject y)
    {
        return x.Var1 == y.Var1 && x.Var2 == y.Var2;
    }

    public int GetHashCode(string obj)
    {
        //
    }
}

public class CustomObject
{
    public string Var1 { get; set; }
    public string Var2 { get; set; }
}

答案 2 :(得分:1)

尝试使用自定义类型和hashSet集合。样本:

public class Item : IEqualityComparer<Item>
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }

    public bool Equals(Item x, Item y)
    {
        return x.Valie1 == y.Value1 && x.Value2 != y.Value2;
    }

    public int GetHashCode(string obj)
    {
        // implement
    }
}

使用hashSet

HashSet<Item> set = new HashSet<Item>();
set.Add(new Item() { Value1 = "1", Value2 = "1" });

答案 3 :(得分:0)

没有重复的回复

   static NameValueCollection GetCollection()
    {
    NameValueCollection collection = new NameValueCollection();
    collection.Add("Sam", "Dot Net Perls");
    collection.Add("Bill", "Microsoft");
    collection.Add("Bill", "White House");
    collection.Add("Sam", "IBM");
    return collection;
    }

    static void Main()
    {
    NameValueCollection collection = GetCollection();
    foreach (string key in collection.AllKeys) // <-- No duplicates returned.
    {
        Console.WriteLine(key);
    }

重复返回

public class ListWithDuplicates : List<KeyValuePair<string, string>>
{
    public void Add(string key, string value)
    {
        var element = new KeyValuePair<string, string>(key, value);
        this.Add(element);
    }
}

var list = new ListWithDuplicates();
list.Add("rr", "11");
list.Add("rr", "22");
list.Add("rr", "33");

foreach(var item in list)
{
    string x = string.format("{0}={1}, ", item.Key, item.Value);
}

输出rr = 11,rr = 22,rr = 33。