C#按值对对象进行排序
我想保存一个CollidableActor对象列表,按其属性“.Position.X”排序 我想知道做这件事最快(最有效)的方法是什么。起初我想使用SortedDictionary,然后是SortedList,但我读到SortedDictionary无论如何都更快 现在我很困惑,因为我不知道我想要的是字典还是列表。另外,当实现IComparable接口并创建我的CompareTo()方法时,只返回.Position.X是否足够 如果没有,根据.Position.X,是否有更好的结构或类可以在添加/删除内容时快速排序?(我将经常从列表中添加/删除对象;在添加对象时排序,还是在使用列表之前进行更新时排序更好?) 多谢各位C#按值对对象进行排序,c#,sorting,sortedlist,icomparable,sorteddictionary,C#,Sorting,Sortedlist,Icomparable,Sorteddictionary,我想保存一个CollidableActor对象列表,按其属性“.Position.X”排序 我想知道做这件事最快(最有效)的方法是什么。起初我想使用SortedDictionary,然后是SortedList,但我读到SortedDictionary无论如何都更快 现在我很困惑,因为我不知道我想要的是字典还是列表。另外,当实现IComparable接口并创建我的CompareTo()方法时,只返回.Position.X是否足够 如果没有,根据.Position.X,是否有更好的结构或类可以在添加
编辑:事实上,由于所有对象都是唯一的,建议使用某种哈希集集合吗?谢谢。我们可以通过在解决方案中对问题域进行建模来解决这个问题。想想你的领域,它是一个画布/网格,你想在上面渲染你的可碰撞对象,你想解决一个调度问题吗?在此基础上设计您的数据结构 让我们列出数据结构的目标-
public void Add(MyObject对象)
{
_位置图添加(obj.Location.X,obj);
_objectMap.Add(obj.Id,obj);
}
公共MyObject GetPositionById(字符串id)
{
返回_objectMap[id].Location.X;
}
公共IEnumerable SortedByX()
{
_positionMap.GetEnumerator();
}
公共无效删除(字符串id)
{
var obj=_objectMap[id];
_locationMap.Remove(对象位置X);
_objectMap.Remove(id);
}
}
注意-请注意,代码可能无法编译,需要注意错误处理、线程问题等问题。列表中可能有多少对象需要排序?几十、几百、几百万?上百;i、 e.在100到1000之间。我明白了,在这种情况下,现代客户机上的任何性能改进都可能很小(也就是说,您比我更了解您的设置:))为了我的钱,我将实现IComparable以返回.Position.X,并且为了简单起见,只需使用排序列表-完全按照您的建议。
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);
}