c#按值排序对象

本文关键字:对象 排序 | 更新日期: 2023-09-27 18:18:35

我想保存一个CollidableActor对象的列表,按它们的属性". position . x "排序。

我想知道做这件事最快(最有效)的方法是什么。起初我想使用SortedDictionary,然后是SortedList,但我读到SortedDictionary更快。

现在我很困惑,因为我不知道我是想要字典还是列表。另外,当实现IComparable接口并创建我的CompareTo()方法时,仅仅返回.Position.X是否足够了?

如果没有,是否有一个更好的结构或类,我可以使用它来快速排序的东西,因为我添加/删除它们,根据.Position.X?(我将从列表中添加/删除对象很多;是在添加对象时进行排序,还是在更新后才使用列表呢?

谢谢。

编辑:事实上,由于所有对象都是唯一的,是否建议使用某种HashSet集合?谢谢。

c#按值排序对象

我们可以通过对解中的问题域进行建模来解决这个问题。想想你的领域,它是一个画布/网格,你想要渲染你的可碰撞对象,你试图解决调度问题?在此基础上设计你的数据结构。

让我们列出数据结构的目标-

    我们应该能够快速插入对象。
  1. 我们应该能够通过位置访问对象。X效率。
  2. 我们应该能够有效地通过Id获取对象的位置。

创建您自己的数据结构,通过在您自己的类中封装排序列表和哈希表来满足这些目标-

公共类MyCanvas{private dictionary _positionMap = new SortedList();private IDictionary _objectMap = new HashTable();

public void Add(MyObject obj)
{
     _positionMap.Add(obj.Location.X, obj);
     _objectMap.Add(obj.Id, obj);
}
public MyObject GetPositionById(string id)
{
     return _objectMap[id].Location.X;
}
public IEnumerable<MyObject> SortedByX()
{
     _positionMap.GetEnumerator();
}
public void Delete(string id)
{
     var obj = _objectMap[id];
     _locationMap.Remove(obj.Location.X);
     _objectMap.Remove(id);
}

}

注意-请注意,代码可能无法编译,并且需要注意错误处理,线程问题等。