![]() |
1
20
op edit:正如很多人正确指出的那样,原来的答案不会返回相同的集合(原来更注重对字典中q部分的排序)。请参阅底部的编辑,我在这里处理可观察集合的排序。原来留在这里,因为仍在接受投票 您可以使用linq作为下面说明的dosort方法。快速代码段:生成 3:XEY 6:FTY 7:AAA 或者,可以对集合本身使用扩展方法
编辑 若要返回ObservableCollection,请调用.ToObservableCollection 索尔多克 使用例如 this implementation . 操作编辑 可以使用扩展方法对可观察对象进行排序并返回排序后的相同对象。对于较大的集合,请注意集合更改通知的数量,例如
用法: 带观察者的示例(使用Person类保持简单)
从上面输出:
Person类实现IComparable和IEquatable,后者用于最小化对集合的更改,以减少引发的更改通知数。 |
![]() |
2
77
这个简单的扩展对我很有用。我只是要确保
|
![]() |
3
38
我知道这个问题很古老,但在谷歌搜索时偶然发现了这个问题,并找到了一个相关的博客条目,比这里的答案更好: http://kiwigis.blogspot.com/2010/03/how-to-sort-obversablecollection.html 更新 这个 ObservableSortedList @romkyns在评论中指出,这会自动保持排序顺序。
但是也要注意这句话
|
![]() |
4
23
您可以使用以下简单方法:
您可以这样排序:
更多细节: http://jaider.net/2011-05-04/sort-a-observablecollection/ |
![]() |
5
15
我喜欢上面“Richie”博客中的气泡排序扩展方法,但我不一定只想对整个对象进行排序比较。我更经常希望对对象的特定属性进行排序。所以我修改了它以接受键选择器,就像orderby那样,这样您就可以选择要排序的属性:
您将以调用orderby的相同方式调用它,但它将对ObservableCollection的现有实例进行排序,而不是返回新的集合:
|
![]() |
6
13
WPF提供开箱即用的实时分拣
使用
一旦初始化完成,就没有其他事情可做了。与被动排序相比,listcollectionview的优势在于它以一种对开发人员透明的方式完成了所有繁重的工作。新项目将自动按正确的排序顺序放置。派生自的任何类
见 ListCollectionView 用于文档和其他功能。 |
![]() |
7
9
@Nielw的答案是如何进行真正的就地排序。我想添加一个稍微改变的解决方案,让你不必使用
现在您可以像大多数LINQ方法一样调用它:
|
![]() |
8
8
我想 加上尼尔的答案 . 合并一个类似于orderby的方法。将此方法添加为扩展名:
使用如下:
|
![]() |
9
8
一个变体是使用
selection sort
算法。元素使用
这个算法有一些很好的特性:
算法很简单。迭代集合以查找最小的元素,然后将其移动到集合的开头。从第二个元素开始重复这个过程,以此类推,直到所有元素都移动到位。该算法并不是非常有效,但是对于您要在用户界面中显示的任何内容来说,它都不重要。但是,就移动操作的数量而言,它是相当有效的。
这里有一个扩展方法,为了简单起见,需要元素实现
对集合进行排序只需调用扩展方法:
|
![]() |
10
4
为了稍微改进一下xr280xr answer上的扩展方法,我添加了一个可选的bool参数来确定排序是否是降序的。我还将卡洛斯P的建议纳入了对该答案的评论中。请看下面。
|
![]() |
11
2
您是否需要随时对收藏进行分类?在检索配对时,您需要始终对它们进行排序,还是只进行几次排序(可能只是为了演示)?你希望你的收藏品有多大?有很多因素可以帮助你决定使用巫术。
如果需要在任何时候对集合进行排序,即使插入或删除元素和插入速度都不是问题,也可以实现某种类型的
如果您只需要对收藏进行几次分类,请使用:
这将需要一些时间来对集合进行排序,但即使如此,它可能是最佳的解决方案,具体取决于您如何处理它。 |
![]() |
12
2
我目前的答案已经获得了最多的选票,但我找到了一种更好、更现代的方法。
|
![]() |
13
1
创建新类
|
![]() |
14
1
一种方法是将其转换为列表,然后调用sort(),提供比较委托。比如: (未经测试)
|
![]() |
15
1
|
![]() |
16
1
见鬼,我也会给出一个很快拼凑起来的答案……它看起来有点像这里的其他实现,但我会添加到任何人: (几乎没有测试过,希望我没有把自己弄脏) 让我们先陈述一些目标(我的假设):
1)必须排序
2)一定不能效率低下(即 关闭 达到标准的“良好”分拣效率)
|
![]() |
17
1
这些答案对我来说都不起作用。要么是因为它搞砸了绑定,要么是因为它需要太多额外的编码,以至于有点像一场噩梦,要么就是因为答案被破坏了。所以,我想还有一个更简单的答案。它的代码要少得多,它仍然是同一个可观察的集合,还有一个额外的this.sort类型的方法。如果有什么原因我不应该这样做(效率等),请告诉我?
…球探是我的公共课。只是看起来简单多了。附加的好处:它实际上是有效的,并且不会干扰绑定或返回新的集合等。 |
![]() |
18
1
好吧,因为我在让观察员与XAML合作时遇到了问题,所以我继续创建了 SortingObservableCollection .它继承了ObservableCollection,所以它与XAML一起工作,我已经对它进行了单元测试,代码覆盖率达到98%。我在自己的应用程序中使用过它,但我不会保证它是无缺陷的。请随时作出贡献。下面是示例代码用法:
它是一个PCL,因此它应该与Windows Store、Windows Phone和.NET 4.5.1一起工作。 |
![]() |
19
1
这就是我对OC扩展所做的:
|
![]() |
20
1
这对我很有效,很久以前就在某个地方发现了。
用途:
|
![]() |
21
0
我需要能够按多个东西排序,而不仅仅是一个。这个答案是基于其他一些答案,但它允许更复杂的排序。
使用时,请先传入一系列orderby/thenby调用。这样地:
|
![]() |
22
-3
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 3 月前 |
![]() |
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 4 月前 |
![]() |
CactusCake · if语句中应有分号 5 月前 |
![]() |
Bin4ry · 子文件夹中的应用程序设置 5 月前 |