Files
plugin-library/Assets/00.StaryEvo/Runtime/Tool/HashMap.cs
2025-03-31 11:16:52 +08:00

179 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
using System;
using System.Collections;
using System.Linq;
public class HashMap<TKey, TValue> : IDictionary<TKey, TValue>, IEnumerable
{
Dictionary<TKey, TValue> HashMapData = new Dictionary<TKey, TValue>();
public TValue this[TKey key]
{
get
{
return HashMapData[key];
}
set
{
if (HashMapData.ContainsKey(key))
{
HashMapData[key] = value;
}
else
{
HashMapData.Add(key, value);
}
}
}
public int Count
{
get
{
return HashMapData.Count;
}
}
//如果 true 是只读的,则为 IDictionary否则为 false。 在 Dictionary<TKey,TValue> 的默认实现中,此属性始终返回 false。
public bool IsReadOnly
{
get
{
return false;
}
}
public ICollection<TKey> Keys
{
get
{
return HashMapData.Keys;
}
}
public ICollection<TValue> Values
{
get
{
return HashMapData.Values;
}
}
public void Add(KeyValuePair<TKey, TValue> item)
{
if (item.Key == null)
{
throw new ArgumentNullException("key can't be null.");
}
if (HashMapData.ContainsKey(item.Key))
{
HashMapData[item.Key] = item.Value;
}
else
{
HashMapData.Add(item.Key, item.Value);
}
}
public void Add(TKey key, TValue value)
{
if (key == null)
{
throw new ArgumentNullException("key can't be null.");
}
if (HashMapData.ContainsKey(key))
{
HashMapData[key] = value;
}
else
{
HashMapData.Add(key, value);
}
}
public void Clear()
{
HashMapData.Clear();
}
public bool Contains(KeyValuePair<TKey, TValue> item)
{
return HashMapData.Contains(item);
}
public bool ContainsKey(TKey key)
{
return HashMapData.ContainsKey(key);
}
public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
{
if (array == null)
{
return;
}
if (array.Length <= arrayIndex)
{
return;
}
int count = array.Length;
for (int i = 0; i < count; i++)
{
if (HashMapData.ContainsKey(array[i].Key))
{
HashMapData[array[i].Key] = array[i].Value;
}
else
{
HashMapData.Add(array[i].Key, array[i].Value);
}
}
}
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return HashMapData.GetEnumerator();
}
public bool Remove(KeyValuePair<TKey, TValue> item)
{
if (HashMapData.ContainsKey(item.Key) && HashMapData.ContainsValue(item.Value))
{
return HashMapData.Remove(item.Key);
}
return false;
}
public bool Remove(TKey key)
{
return HashMapData.Remove(key);
}
public bool TryGetValue(TKey key, out TValue value)
{
try
{
if (HashMapData.ContainsKey(key))
{
value = HashMapData[key];
return true;
}
else
{
value = default(TValue);
return false;
}
}
catch
{
value = default(TValue);
return false;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return HashMapData.GetEnumerator();
}
}