重新排序集合 C#

5
我有一个问题,通过搜索似乎找不到答案(或者我正在搜索完全错误的东西!)。 我有一个名为“Top 10”的项目列表,它在从我的数据库填充的sortedlist项中(其中int是位置,string是项)。 我想能够通过单击按钮上下移动项目列表顺序,然后将新顺序保存回数据库。 我对数据库部分很好,只是重新排序真的很困难 - sortedlist是否是正确的集合? 感谢提供任何建议。

@Adam:列表视图是如何实现的?你使用了哪种类型的视图? - Asaf R
嗨Asaf - 我目前正在获取我的集合并将其绑定到一个重复器(尽管我对显示方法并不在意)。 - Adam
4个回答

6
一个 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);

非常感谢您的回复(与足球相关的答案总是更容易理解!)我想我明白了,所以在您的例子中,如果狼队下降一个位置,托特纳姆热刺就会自动上升一个位置?所有其他列表成员是否保持位置,您要替换的项目移动的方向是什么,它总是向上移动吗? - Adam
是的,它们根据您最后的排序标准在数组中保持其位置。然后,在您决定重新排序之前,您将在该排序内重新定位。 - Nicholas Murray

3
不,SortedList会按照字母/数字顺序保持内容排序。你需要一个简单的列表,可以让你从不同位置提取和插入内容。

0
一个 SortedList 会强制每个项目跟踪其在列表中相对于其他项目的位置(即 int 位置)。这应该是集合的责任,因此您应该使用某种集合,以便可以移动物品而无需手动更正每个项目。

1
谢谢 - 你能建议一个合适的集合吗? - Adam

0
我认为SortedList正是你想要的。当你从数据库中获取数据时,你希望根据位置字段(根据你在OP中提到的内容)保持数据有序。我假设你会有一个包含从DB返回的数据的类。为了使数据正确排序,你需要在你的自定义类中实现IComparable接口,这样SortedList就知道使用哪些值来保持列表有序。这样,当你添加/删除项目时,它们将保持正确的顺序。
你可以使用泛型List<>,但那样你必须自己编写所有排序代码,而SortedList已经做到了这一点,为什么还要重新发明轮子呢?
请查看此页面以获取更多信息:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接