![对随机生成的数字列表进行排序](https://linux22.com/image/422439/%E5%AF%B9%E9%9A%8F%E6%9C%BA%E7%94%9F%E6%88%90%E7%9A%84%E6%95%B0%E5%AD%97%E5%88%97%E8%A1%A8%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
这是我几天前提出的一个问题的第二部分,并得到了用户相当精彩的回答埃格尔,您可以找到这里。
我现在想利用提供给我的 LaTeX 的一部分,并更改生成数字列表的命令。我想获取生成的列表并按升序对其进行排序。到目前为止,我用来生成数字列表的代码如下:
\documentclass[12pt]{article}
\usepackage{xfp}
\ExplSyntaxOn
\NewDocumentCommand{\randomvalues}{m}
{
\int_rand:nn { -40 } { 40 }
\prg_replicate:nn { #1 - 1 } { , \:\int_rand:nn { -40 } { 40 } }
}
\ExplSyntaxOff
目前,它将输出一个列表,其中包含 m 个随机且唯一的整数,它们介于 -40 和 40 之间,例如,对于 m=5,x = -2、5、0、-10、30。我希望该列表看起来像 x = -10、-2、0、5、30。
答案1
文档中的第一个示例l3sort
展示了如何对逗号分隔列表中的数字列表进行排序:
在上面的例子中,用 排序一个逗号分隔的列表\clist_sort:Nn
。第一个参数是需要排序的变量,第二个参数是比较代码。
我调整了你的代码,首先生成n随机数,然后将它们存储在一个序列中,然后用对该序列进行排序\seq_sort:Nn
,最后将该序列与一起使用\seq_use:Nn
。
\documentclass[12pt]{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l__davidg_randint_seq
\NewDocumentCommand{\randomvalues}{m}
{
\int_step_inline:nn {#1}
{ \seq_put_right:Nx \l__davidg_randint_seq { \int_rand:nn { -40 } { 40 } } }
\seq_sort:Nn \l__davidg_randint_seq
{
\int_compare:nNnTF { ##1 } < { ##2 }
{ \sort_return_same: }
{ \sort_return_swapped: }
}
\seq_use:Nn \l__davidg_randint_seq { ,~ }
}
\ExplSyntaxOff
\begin{document}
\randomvalues{5}
\medskip
\randomvalues{55}
\end{document}