Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#按值对对象进行排序_C#_Sorting_Sortedlist_Icomparable_Sorteddictionary - Fatal编程技术网

C#按值对对象进行排序

C#按值对对象进行排序,c#,sorting,sortedlist,icomparable,sorteddictionary,C#,Sorting,Sortedlist,Icomparable,Sorteddictionary,我想保存一个CollidableActor对象列表,按其属性“.Position.X”排序 我想知道做这件事最快(最有效)的方法是什么。起初我想使用SortedDictionary,然后是SortedList,但我读到SortedDictionary无论如何都更快 现在我很困惑,因为我不知道我想要的是字典还是列表。另外,当实现IComparable接口并创建我的CompareTo()方法时,只返回.Position.X是否足够 如果没有,根据.Position.X,是否有更好的结构或类可以在添加

我想保存一个CollidableActor对象列表,按其属性“.Position.X”排序

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

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

如果没有,根据.Position.X,是否有更好的结构或类可以在添加/删除内容时快速排序?(我将经常从列表中添加/删除对象;在添加对象时排序,还是在使用列表之前进行更新时排序更好?)

多谢各位


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

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

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

  • 我们应该能够快速插入对象
  • 我们应该能够通过Position.X高效地访问对象
  • 我们应该能够通过对象的Id有效地获取对象的位置
  • 创建自己的数据结构,通过在自己的类中封装排序列表和哈希表来实现这些目标-

    公共类MyCanvas { 私有IDictionary _positionMap=新分类列表(); 私有IDictionary_objectMap=新哈希表()

    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);
    }