- Home /
Same Hash For Two Different List ? Why ? How to solve
Why two different value of list generating hashcode. i am trying to detect any changes done in a list , if yes it will get deleted. i couldnt do at my work place so this is just a simple code of generating hash.
`public List<bool> list1 = new List<bool> { true, false, false };
public List<bool> list2 = new List<bool> { true, true, false };
// Use this for initialization
void Start () {
Debug.Log (list1);
Debug.Log (list2);
string a = list1.ToString ();
string b = list2.ToString ();
Debug.Log ("Generating Hash Codes");
Debug.Log(HashString (a));
Debug.Log(HashString (b));
}
public string HashString(string data){
SHA1CryptoServiceProvider cyrpt = new SHA1CryptoServiceProvider();
// hash string
string hash = string.Empty;
//computing hash
byte[] cyrpto = cyrpt.ComputeHash (System.Text.Encoding.UTF8.GetBytes(data),
0,
System.Text.Encoding.UTF8.GetByteCount(data));
//convert to hex
foreach (byte bit in cyrpto) {
hash += bit.ToString("x2");
}
return hash.ToString();
}`
Answer by Bunny83 · Jul 10, 2018 at 07:05 PM
Because ToString of the List class just returns the class name as this is the default behaviour for any class that does not explicitly override the ToString method. So since both lists have the same type the returned string is of course the same.
From your code it's hard to tell what you actually want to achieve. If you want to compare the content of the two lists you actually have to iterate through all elements. A generic list can contain any kind of data. There is no way to turn the content of the whole list into a string in a generic manner. You can use the Aggregate Linq extension to convert your list content into a string. In your case something like this would work:
string a = list1.Aggregate(new StringBuilder(), (sb, v)=>sb.Append(v).Append(" ")).ToString();
To use Aggregate you have to add using System.Linq;
and to use the StringBuilder you have to add using System.Text;
at the top.
Now "a" should contain a string like "true false false "
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Removing element from a list after it's destroyed 2 Answers
Transform child out of bounds. 0 Answers
Null Reference Exception because of a List 1 Answer
Get list of gameObjects and change booleans within them 2 Answers