【问题标题】:Does OrderBy(item => false) affect list order? [duplicate]OrderBy(item => false) 会影响列表顺序吗? [复制]
【发布时间】:2020-02-27 23:54:23
【问题描述】:

OrderBy(item => false) 会影响数组顺序吗?

我想将某个元素移动到数组的末尾:

var numbers = new[] { 3, 7, 4, 1, 5 };
var result = numbers.OrderBy(item => item == 4).ToArray();

此解决方案是否有影响其他元素顺序的副作用 (!=4)?

【问题讨论】:

  • “副作用”是什么意思?这是有效的,因为它是按布尔值排序的,在 .NET 中,0 表示假,1 表示真。您是在问不是 4 的商品是否会保留订单?
  • 如果你的问题是OrderBy是否“稳定”,即对具有相同排序值的项目保留顺序,则查看重复:是。
  • @CodeCaster - 虽然对于某些 true 值可能是“true”,但它实际上是排序的,因为 bool 实现了 IComparable。与任何(暴露的)“数值”无关
  • @Damien 哎呀,我可能在这里混淆了一两件事,感谢您的澄清。
  • @CodeCaster "你问的是不是 4 的商品是否会保留订单?" - 是的,正是这个

标签: c# .net


【解决方案1】:

不,这很好,结果为 true (4) 将在列表末尾,您的结果将是 3、7、1、5、4

【讨论】:

  • 仅仅因为小样本看起来不错并不意味着总体上没问题。正如副本所解释的那样,OrderBy 被明确实现为稳定
【解决方案2】:

没有副作用,因为OrderByIEnumerable 进行操作,IEnumerable 没有任何方法来改变集合

【讨论】:

  • 如果您将“副作用”解释为“改变底层集合”,这是正确的。 OP 可能意味着别的东西。
  • 来自维基百科 en.wikipedia.org/wiki/Side_effect_(computer_science) has an observable effect besides returning a value (the main effect) to the invoker of the operation ,因此 OP 很可能意味着底层集合,而不是输出序列
  • 我不是在要求一个任意的定义,我是在问 OP 的含义。回答一个猜测是没有用的。
  • @CodeCaster,但问题包含一个术语side effect
猜你喜欢
  • 2014-06-05
  • 2012-09-18
  • 1970-01-01
  • 2018-01-11
  • 2015-04-17
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
相关资源
最近更新 更多