gpt4 book ai didi

c# - 当与 orderby 一起使用时,是否存在 ascending 关键字纯粹是为了清楚起见?

转载 作者:太空狗 更新时间:2023-10-29 19:26:39 25 4
gpt4 key购买 nike

如果我进行查询,按如下方式对元素进行排序,我会得到升序。

var i = from a in new int[] { 1, 2, 3, 4, 5 }
orderby a
select a;

如果我添加 ascending 关键字,我会得到相同的结果。

var i = from a in new int[] { 1, 2, 3, 4, 5 }
orderby a ascending
select a;

我认识到在第二个示例中添加 ascending 关键字可以提高可读性,因为它不需要知道 orderby 的默认顺序。

ascending 关键字存在还有其他原因吗?

我也很想知道为什么这个(重大改变?)只是为了在一种特定情况下使用。

编辑:请参阅下面的评论,@Joey 指出,这不是重大更改,因为它是上下文关键字。

最佳答案

是的,这是多余的。由于顺序是隐式升序,所以它不会做任何不同的事情。

我想它提供了完整性,但在如此……无能为力的语言中引入关键字确实令人遗憾。

另一方面,虽然:

  • 它模仿 SQL,在语义方面广泛相关
  • 它避免了“我该怎么做?”问题
  • 它没有害处,也没有人强制您使用它
  • 如果您有 a 降序、b 升序、c 降序、d 升序
  • ,它(可以说)会让事情变得更清楚

示例(见注释)order by a, order by b 实际上与order by a, b 非常不同:

public static void Main()
{
var data = new[] { new { X = 1, Y = 1 }, new { X = 1, Y = 2 },
new { X = 2, Y = 1 }, new { X = 2, Y = 2 } };

foreach (var pair in from p in data orderby p.X, p.Y select p)
{
Console.WriteLine("{0},{1}", pair.X, pair.Y);
}
Console.WriteLine();
foreach (var pair in from p in data orderby p.X orderby p.Y select p)
{
Console.WriteLine("{0},{1}", pair.X, pair.Y);
}
}

打印:

1,1
1,2
2,1
2,2

1,1
2,1
1,2
2,2

注意中间两个是反的。这是因为之间的区别:

data.OrderBy(p => p.X).ThenBy(p => p.Y)

在第一个循环中,

data.OrderBy(p => p.X).OrderBy(p => p.Y)

在第二个。

因为 LINQ 试图保证稳定的排序(即当有匹配项时,数据保留在原始顺序中),OrderBy().OrderBy() 首先 排序(在 X 上),然后 resorts 数据,仅在 Y 匹配时查看原始(按 X 排序)顺序。或者换句话说:它将它们从左到右翻转。

关于c# - 当与 orderby 一起使用时,是否存在 ascending 关键字纯粹是为了清楚起见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com