我想在集合中存储两个字符串,但组合应该是唯一的,例如
'1','2'
'2','1'
'1','2' -> not allowed
'2','3'
如果我希望两个字符串都是键,我应该使用哪个集合?
答案 0 :(得分:4)
使用HashSet
的{{1}}。
例如:
KeyValuePair<String, String>
这将只在集合中产生一个条目。
供参考:
答案 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。