重新排序集合 C#

问题描述 投票:0回答:4

我有一个问题,我似乎无法通过搜索找到答案(要么是我正在寻找完全错误的东西!)。我在从我的数据库填充的排序列表项中有一个名为“前 10 个”的项目列表(SortedList,其中 int 是位置,字符串是项目)。我希望能够通过单击按钮在列表顺序中上下移动项目,然后将新订单保存回数据库。我对数据库部分没问题,这只是我真正在努力解决的重新排序问题 - 排序列表是正确的集合吗?

非常感谢您提供的任何建议。

c# .net collections sortedlist
4个回答
6
投票

A

SortedList
用于在您添加或删除项目时维护 SortedList 中的顺序。

您应该创建对象的自定义列表,然后根据该对象的属性进行排序。

因此,如果数据库中的条目是这样的,您可以将其放入一个对象中,将其添加到列表中,然后使用 Lambda 根据您喜欢的标准对其进行排序

public class LeaguePosition
{
    public int Position { get; set; }
    public string Team { get; set; }
}

List<LeaguePosition> League = new List<LeaguePosition>();
League.Add(new LeaguePosition() { Position = 2, Team = "Wolves" });
League.Add(new LeaguePosition() { Position = 3, Team = "Spurs" });
League.Add(new LeaguePosition() { Position = 1, Team = "Villa" });
        
League.Sort((teamA, teamB) => teamA.Position.CompareTo(teamB.Position));

您还可以使用

RemoveAt()
Insert()
将项目移动到列表中的自定义位置。

LeaguePosition teamToMove = League[1];
League.RemoveAt(1);
League.Insert(2, teamToMove);

3
投票

不,

SortedList
保持事物按排序(字母/数字)顺序排列。您需要一个简单的列表,可以让您将内容拉出并将它们插入到不同的位置。


0
投票

SortedList 将强制每个项目跟踪其在列表中相对于其他项目的位置(您的 int 位置)。这应该是集合的责任,因此您应该使用某种集合,它允许您向上/向下/四处移动内容,而无需手动更正每个项目。


0
投票

我想说 SortedList 正是您想要的。当您从数据库中获取数据时,您希望根据位置字段(我可以从您的操作中得知)保持数据的顺序。我假设您将有一个包含从数据库返回的数据的类。为了使数据保持正确的顺序,您需要在自定义类中实现 IComparable 接口,以便 SortedList 知道使用哪些值来保持列表的顺序。这样,当您添加/删除项目时,您将使它们保持正确的顺序。

您可以使用通用 List<>,但随后您必须自己编写所有代码来对项目进行排序,SortedList 已经做到了这一点,那么为什么还要重新发明轮子呢?

查看此页面了解更多信息:

http://www.dotnetspider.com/resources/4679-Applying-custom-sort-SortedList.aspx

© www.soinside.com 2019 - 2024. All rights reserved.