对随机生成的数字列表进行排序

对随机生成的数字列表进行排序

这是我几天前提出的一个问题的第二部分,并得到了用户相当精彩的回答埃格尔,您可以找到这里

我现在想利用提供给我的 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}

在此处输入图片描述

相关内容