通过克隆键从哈希表中检索值; C#

Joh*_*nny 3 c# clone hashtable key

我想知道是否有任何可能的方法使用与实际键相同的键从哈希表中检索项目,但是使用不同的对象.我理解为什么它可能不可能,但我想看看是否有任何棘手的方法来做到这一点.

我的问题源于这样一个事实,即像我一样愚蠢,我用int []作为键创建了哈希表,整数数组包含表示空间位置的索引.我不知何故知道每次我想添加一个新条目时我都需要创建一个新的int [],但忽略了当我生成空间坐标数组时,它们在检索哈希表中的值时毫无价值.

现在我正在尝试重新排列事物,以便我可以将我的值存储在ArrayLists中,或者是否在每次我想要获取值时搜索Hashtable中的键列表,而不是选项非常酷.

除非当然有一种方法让// 1像// 2一样工作!

提前致谢.

 static void Main(string[] args)
        {
            Hashtable dog = new Hashtable();

            //1
            int[] man = new int[] { 5 };
            dog.Add(man, "hello");
            int[] cat = new int[] { 5 };
            Console.WriteLine(dog.ContainsKey(cat)); //false


            //2
            int boy = 5;
            dog.Add(boy, "wtf");
            int kitten = 5;
            Console.WriteLine(dog.ContainsKey(kitten)); //true;


        }
Run Code Online (Sandbox Code Playgroud)

Sam*_*eff 8

是的,你有两个选择.

  1. 实现Equals()和GetHashCode()在关键类中.

  2. 创建自定义IEqualityComparer并将其传递给Hashtable构造函数.

你要实现Equals()和GetHashCode()自己在实现您的自定义类的所有用法意义.如果它们有时是合适的,那么使用IEqualityComparer具有相同功能但与类本身分开的自定义.第二个选项还允许您为非自定义键类提供自定义规则.