In 这个问题其中一个建议是通过 Random.Next() 对列表进行排序。
我认为(也许是错误的)他是在建议这个
public static IEnumerable<T> RandomSort<T>(this IEnumerable<T> items)
{
Random r = new Random();
var a = items.ToArray();
Array.Sort(a, (t1, t2) => (r.Next()%2==0)?-1 : 1);
return a;
}
(是的,已经有一个 Array.RandomShuffle 函数,您显然会使用它。这不是问题)
编辑:发帖人已经澄清了答案。他建议使用 OrderBy 子句
问题是,上面的代码(使用 Array.Sort())运行安全吗?
我的问题是,它将违反谓词排序的基本法则:
如果 (a
它甚至不能保证下次你问时 if (a
这会让你进入“未定义行为”领域吗?
例如,它可能会崩溃或陷入无限循环,具体取决于 Random() 返回的数字序列?
这是创建列表随机排列的有用工具。对于给定的排列,如果a
是在之前b
and b
是在之前c
then a
是在之前c
.
另一种思考方式是这样的:如果您每次使用相同的种子播种随机数生成器,那么它将始终产生相同的顺序。因此,您可以将随机数生成器的每个种子视为生成(可能)不同的列表顺序。
它甚至不能保证下次你问时 if (a
没关系。但如上所述,如果我们使用相同的种子为随机数生成器提供种子并将其呈现给Array.Sort
正如在相同状态下的示例代码中一样,它将产生相同的排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)