相关疑难解决方法(0)

以降序排序数组的更好方法

我有一个int数组,我必须通过降序排序.

因为我没有找到任何方法来按降序对数组进行排序.目前我按降序对数组进行排序,如下所示

int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );
Run Code Online (Sandbox Code Playgroud)

现在,问题是.在c#中有更好的方法吗?

c# linq sorting

50
推荐指数
4
解决办法
14万
查看次数

LINQ"OrderBy"使用什么排序算法?

显然LINQ的"OrderBy"最初被指定为不稳定,但到Orca时,它被指定为稳定.并非所有文档都已相应更新 - 请考虑以下链接:

但是,如果LINQ的OrderBy现在"稳定",那么这意味着它没有使用快速排序(这本质上是不稳定的),即使某些文档(例如Troy的书)说它是.所以我的问题是:如果不是快速排序,那么LINQ的orderBy使用的实际算法是什么?

linq sorting algorithm quicksort

49
推荐指数
3
解决办法
1万
查看次数

OrderBy和List与IOrderedEnumerable

我遇到了以下代码的意外问题.

List<string> items = new List<string>();
items = items.OrderBy(item => item);
Run Code Online (Sandbox Code Playgroud)

此代码生成错误:

无法将类型'System.Linq.IOrderedEnumerable'隐式转换为'System.Collections.Generic.List'.存在显式转换(您是否错过了演员?)

看来我可以改为items类型IEnumerable<string>,错误就消失了.但我需要能够将项目添加到列表中,这IEnumerable不支持.

有人可以帮我理解这个错误,最容易解决的是什么?简单地投射结果是否安全?

c# linq

27
推荐指数
4
解决办法
4万
查看次数

为什么OrderBy返回IOrderedEnumerable <T>比Sort快得多?

这是对C#Sort和OrderBy这个优秀问题的跟进比较.我将使用相同的示例:

List<Person> persons = new List<Person>();
persons.Add(new Person("P005", "Janson"));
persons.Add(new Person("P002", "Aravind"));
persons.Add(new Person("P007", "Kazhal"));
Run Code Online (Sandbox Code Playgroud)

争论的方法是:

persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true));
//and
persons.OrderBy(n => n.Name);
Run Code Online (Sandbox Code Playgroud)

首先让我说,我理解没有任何重大的性能差异需要担心.但我很想知道为什么OrderBy表现得比这更好Sort.我正在使用@phoog在原始问题中发布的答案.

private void button1_Click(object sender, EventArgs e)
{
    IEnumerable<Person> people;

    BenchMark(persons => persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true)));

    BenchMark(persons => people = persons.OrderBy(n => n.Name));
}

private static Random randomSeed = new Random();
public static string RandomString(int size, bool lowerCase)
{
    var sb = new StringBuilder(size); …
Run Code Online (Sandbox Code Playgroud)

.net c# linq sorting collections

20
推荐指数
2
解决办法
6133
查看次数

Order By vs Sort用于创建有序集合

我已经通过这篇文章 C#Sort和OrderBy比较

但是这个问题所接受的答案对我来说是模糊不清的.

我无法决定何时使用Sort或何时使用OrderBy.

反正是建议按彼此排序或排序.

所以,请给我一个简洁的答案,没有任何复杂性.

c# sorting collections

7
推荐指数
1
解决办法
3570
查看次数

Linq OrderBy() 与 List.Sort() 的速度

这是随机整数的枚举:

var r = new Random();
var e = Enumerable.Repeat(1, 10_000_000).Select( _ => r.Next());
Run Code Online (Sandbox Code Playgroud)

您认为哪个版本更快:

var result = e.OrderBy(x => x).Last(); //materialize the IEnumerable
Run Code Online (Sandbox Code Playgroud)

或者

var l = e.ToList();
l.Sort();
var result = l.Last();
Run Code Online (Sandbox Code Playgroud)

我希望.OrderBy(x => x).Last()在第一个示例中进行优化,只对列表的一小部分进行排序,或者只对列表进行 O(n) 遍历。

剧透: 事实并非如此。

但那么,两个版本的性能至少应该不相上下吧?我是说:

在第一个中,OrderBy()分配一个临时数组并就地对其进行排序。
在第二个中,我明确分配了一个列表并将Sort()其就位。

实际结果表明该OrderBy()示例慢了 4-5 倍!(5-6 秒 vs 1.2-1.3 秒)

任何人都可以解释为什么吗?

.OrderBy(x => x)案例确实为每个元素执行其x => x身份 lambda。
和...之间的不同:

var result2 = e.Last();
Run Code Online (Sandbox Code Playgroud)

var result2 = e.Select(x=>x).Last(); …
Run Code Online (Sandbox Code Playgroud)

c# linq sorting performance ienumerable

5
推荐指数
1
解决办法
7595
查看次数

OrderBy函数排序算法类型

我正在学习C#LINQ,我想知道使用的排序算法的类型

c# linq sorting

0
推荐指数
1
解决办法
324
查看次数