0

我有三个列表框:lb1、lb2 和 lb3。

假设在 lb1 中有 4 个元素,在 lb2 中有 5 个元素。

(lb1 和 lb2) 的每个唯一组合都可以分配给 lb3 中的一个元素。

我想将这些组合和关联存储在一个集合中。我的第一个想法是使用 KeyValuePair 和 Key = (lb1Element1_lb2Element1), Value = lb3Element1。

但是使用这个解决方案我会遇到问题。假设我删除了 lb1Element1,没有选项(?)可以从 KeyValuePair-List 中删除所有其他出现 lb1Element1 的组合。

在这种情况下,哪种集合类型最好?

提前感谢约翰

编辑:所有 3 个列表框都包含数字。

4

3 回答 3

1

2个字典怎么样,1个用于lb1,1个用于lb2:

Dictionary<string, Dictionary<string,string>>

第一个 dic:key 是每个 lb1 的值,value 是 lb2 的所有值(key 和 value 相同的字典) 第二个 dic:key 是每个 lb2 的值,value 是 lb1 的所有值

如果您从 lb2 列表框中删除选项“x”,然后要查找已删除 lb2 值的所有连接 lb1 值,请从第一个 dic 中删除所有将“x”作为 lb2 值的对,然后删除整个“x” " 来自第二个 dic 的键:

Foreach(var lb1value in Dic2.ElementAt("x").value.keys)
  {
    Dic1.ElementAt("lb1value").
     value.RemoveAt("x");
  }

dic2.removeAt("x");
于 2013-01-07T22:40:11.333 回答
1

您可以只使用一个Dictionary<string,string>for 键值,它还提供了以下功能Remove()

 Dictionary<string, string> items = new Dictionary<string, string>();

 items.Remove("mykey");
于 2013-01-07T22:37:41.100 回答
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;
    }
}

然后您可以在 a 中使用它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);
}
于 2013-01-07T22:58:04.767 回答