我有三个ListBox:lb1,lb2和lb3。
让我们说在lb1中有4个元素,在lb2中是5个元素。
(lb1和lb2)的每个唯一组合可以分配给lb3中的元素。
我想要存储在集合中的那些组合和关联。 我的第一个使用KeyValuePair,Key =(lb1Element1_lb2Element1),Value = lb3Element1。
但是使用这个解决方案我会遇到问题。 假设我删除lb1Element1,没有选项(?)删除KeyValuePair-List中出现lb1Element1的所有其他组合。
在这种情况下哪种收集类型最好?
提前致谢 约翰
编辑:所有3个列表框都包含数字。
答案 0 :(得分:1)
你可以使用Dictionary<string,string>
来获得keyvalue,这也提供Remove()
Dictionary<string, string> items = new Dictionary<string, string>();
items.Remove("mykey");
答案 1 :(得分:1)
2个词典,1个用于lb1,1个用于lb2:
Dictionary<string, Dictionary<string,string>>
第一个dic:键是每个lb1值,值是lb2的所有值(键和值相同的字典) 第二个词:关键是每个lb2值,值是lb1
的所有值如果从lb2列表框中删除选项“x”,然后要查找已删除的lb2值的所有已连接的lb1值,请从第1个删除所有具有“x”作为lb2值的对,然后删除来自第二个dic的整个“x”键:
Foreach(var lb1value in Dic2.ElementAt("x").value.keys)
{
Dic1.ElementAt("lb1value").
value.RemoveAt("x");
}
dic2.removeAt("x");
答案 2 :(得分:0)
为什么不为密钥创建类:
public class YourKey
{
public int Item1 { get; private set; }
public int Item2 { get; private set; }
public YourKey(int item1, int item2)
{
this.Item1 = item1;
this.Item2 = item2;
}
public override bool Equals(object obj)
{
YourKey temp = obj as YourKey;
if (temp !=null)
{
return temp.Item1 == this.Item1 && temp.Item2 == this.Item2;
}
return false;
}
public override int GetHashCode()
{
int hash = 37;
hash = hash * 31 + Item1;
hash = hash * 31 + Item2;
return hash;
}
}
然后您可以在Dictionary<YourKey, int>
中使用它来存储所有值。
这样做的好处是只能存储Item1和Item2的每个组合的一个值。
如果要删除数据库中包含项目1 == 1:
的所有条目var entriesToDelete = yourDictionary.Where(kvp => kvp.Key.Item1 == 1).ToList();
foreach (KeyValuePair<YourKey, int> item in entriesToDelete)
{
yourDictionary.Remove(item.Key);
}