给定两个字符串,比如hashKey和hashVal,我将这两个字符串添加到一个hash对象中。在本例中,hashVal是一个表示整数的字符串,因此我在将其存储到表中之前将其解析为整数。
现在问题来了。存储在哈希表中的值实际上是一个int32对象,这使得后面使用内部表达式很麻烦。经过长时间的查找,我无法找到一种简单的方法来存储实际的int或提取存储为int而不是int32对象的值。
下面是我尝试做的一个示例:
var myHash : HashObject;
var intTemp : int;
var hashKey : String;
var hashVal : String;
hashKey = "foobar";
hashVal = "123";
if(System.Int32.TryParse(hashVal,intTemp))
{
intTemp = int.Parse(hashVal);
myHash.Add(hashKey,hashVal);
}
// later, attempt to retrieve and use the value:
var someMath : int;
someMath = 456 + myHash["foobar"];
这将生成编译时错误:
BCE0051:运算符“+”不能与类型“int”的左手边和类型“object”的右手边一起使用。
如果尝试强制转换对象,相反,我会得到运行时错误:
InvalidCastException:无法从源类型转换为目标类型。
我知道,在使用新的int之前,我可以先将检索到的值存储在该int中,但对于我将要使用的数学量和键值对的数量来说,这将是一个非常冗长和不雅的解决方案,因此基本上否定了使用哈希表的好处。
有什么想法吗?
为什么不在表中存储hashval
和inttemp
的元组,而不是只存储hashval
?然后您可以直接从查找中访问number值
if(System.Int32.TryParse(hashVal,intTemp)) {
intTemp = int.Parse(hashVal);
myHash.Add(hashKey, { hashValue : hashVal, intValue : intTemp });
}
var someMath : int;
someMath = 456 + myHash["foobar"].intValue;
我不熟悉unity脚本中的“hashobject”。是否可以改用哈希表?:
var myHash: Hashtable;
function Start() {
myHash = new Hashtable();
myHash.Add("one",1);
myHash.Add("two",2);
}
function Update () {
var val = myHash["one"] + myHash["two"] + 3;
Debug.Log("val: " + val);
}
同样,在原始示例中,您将字符串值赋给哈希表,但从未使用intTemp。
C# : The easiest hash solution in Unity is the HashSet:
https://msdn.microsoft.com/en-us/library/bb359438(v=vs.110).aspx
(You have to include the System.Collections.Generic library)
Very simple usage, O(1) speed
// create - dont even worry setting the size it is dynamic, it will also do the hash function for you :)
private HashSet<string> words = new HashSet<string>();
// add- usually read from a file or in a for loop etc
words.Add(newWord);
// access via other other script such as
if (words.Contains(wordToCheck))
return true;