use std::hash::{Hash, Hasher};
use std::collections::hash_map::DefaultHasher;
pub struct ArrayHashHelper;
impl ArrayHashHelper {
pub fn get_array_hash_code(values: Option<&[i32]>) -> i32 {
// Handle null input.
let values = match values {
Some(v) => v,
None => return 0,
};
// HashCode provides a high-quality hash implementation.
let mut hasher = DefaultHasher::new();
// Add each element in order.
// Order matters: [1,2,3] != [3,2,1].
values.hash(&mut hasher);
// Convert u64 hash to i32 to match the C# return type
hasher.finish() as i32
}
pub fn main() {
let numbers = vec![1, 2, 3, 4, 5];
let hash_code = ArrayHashHelper::get_array_hash_code(Some(&numbers));
println!("{}", hash_code);
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
let hash1 = ArrayHashHelper::get_array_hash_code(Some(&array1));
let hash2 = ArrayHashHelper::get_array_hash_code(Some(&array2));
if hash1 == hash2 {
println!("Arrays may be equal.");
}
if hash1 == hash2 && array1 == array2 {
println!("Arrays are equal.");
}
}
}
fn main() {
ArrayHashHelper::main();
}
/*
run:
-1606495798
Arrays may be equal.
Arrays are equal.
*/