我在C#中使用字典来快速检查数组中某个元素是否存在key,其实我不需要key的值,看起来是这样的:
public void update_object_select_contour(MyObject myObject)
{
List<Vector2i> list_position_tmp = myObject.list_position;
Dictionary<string, byte> dictionary_position_tmp = new Dictionary<string, byte>();
for (int i = 0; i < list_position_tmp.Count; i++)
{
dictionary_position_tmp.Add(list_position_tmp[i].ToString(), 0);
}
if(dictionary_position.ContainsKey(new Vector2i(5, 5).ToString()))
{
//Поиск элемента по ключу
}
}
也就是说,我将点的坐标放在字典中,然后根据我需要的搜索检查它们是否在那里,我有两个问题:
1)可以使用什么数据存储结构?(我试图在C#中找到树,但没有找到)我希望它看起来像这样:
Dictionary<string>
2)用于存储坐标位置的最佳键是什么?我怎么知道将对转换为文本并存储为文本不是一个好主意
您正在使用字典。字典是当你有一个键并且你有一个与键关联的值时。
你需要的叫做
HashSet<T>
.如果要存储在
HashSet<T>
坐标中,那么坐标最好是整数,因为即使使用相同的公式计算小数,也可能不相等,这仅仅是因为存在错误。但是使用整数更容易。但是这里需要记住,因为如果你把坐标存储在 中
HashSet<T>
,它使用散列函数进行存储,使用散列函数和等价函数来查找元素,需要重载坐标Equals
类中的 和 方法GetHashCode
。这是一个例子:现在这个类可以用于
HashSet<Coordinates2D>
结论很清楚