2013-03-12 5 views
0

hashKey와 hashVal이라는 두 문자열을 사용하여 해시 객체에 쌍을 추가합니다. 이 예제에서 hashVal은 정수를 나타내는 문자열이므로 테이블에 저장하기 전에 구문 분석합니다.

여기에 문제가 있습니다. 해시 테이블에 저장된 값은 실제로 int32 객체이므로 나중에 내부 표현식을 사용하는 것이 번거로워집니다. 많은 시간을 보아도 실제 int를 저장하거나 int32 객체 대신 int로 저장된 값을 추출하는 쉬운 방법을 찾을 수 없었습니다.
BCE0051 :int32 대신 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"]; 

이 컴파일시 에러가 발생하는 연산자 '+'형식의 왼쪽에 사용할 수 없습니다 '를 INT를 아래

내가 할 노력하고있어의 예입니다 '와'Object '유형의 오른쪽이 있습니다.

개체를 캐스팅하려고하면 대신 런타임 오류가 발생합니다.
InvalidCastException : 원본 형식에서 대상 형식으로 캐스팅 할 수 없습니다.

나는 그것을 사용하기 전에 새로운 int 안에 먼저 가져온 값을 저장할 수 있다는 것을 알고있다. 그러나 그것은 수학의 양과 내가 사용할 수있는 키 - 값 쌍의 수에 대해 매우 길고 세련되지 않은 해결책이 될 것이다. 대부분의 경우 해시 테이블을 사용하면 얻을 수있는 이점을 무효화합니다.

아이디어가 있으십니까?

+1

그것은 하나의 단위로 사용되는 javascript입니다. Jared : 그걸 시도해 볼게, 몇 분 후에 돌아올거야. – Dave

+0

@bfavaretto Unity는 javascript라고 말하기를 좋아하지만 javascript와는 거의 공유하지 않습니다. 누군가가 유니티 스크립트에 적절하게 태그를 다시 붙였다. (나는 자바 스크립트로 게임을 작성했고 유니티의 'javascript'로 옮겨서 거대한 두통을 앓았다.) – Ryan

+1

@bfavaretto 나는 그것에 가서 어떤 것을 보냈지 만 이미 괜찮았다. – Ryan

답변

0

hashValintTemp의 튜플을 hashVal 대신 테이블에 저장하면 어떨까요? 그런 다음 조회에서 바로 숫자 값에 액세스 할 수 있습니다.

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; 
+0

슬프게도, unity/mono에 사용 된 "javascript"는 튜플을 지원하지 않습니다. [link] (http://answers.unity3d.com/questions/381993/does-unity-4-mono-support-tuples.html) – Dave

0

유니티 스크립트의 "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는 사용되지 않습니다.

0
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; 
관련 문제