如何让 Linq 生成所有长度为 n*n 的数组,其中包含 1..n 的所有排列

问题描述 投票:0回答:0

请注意,这 not 又是一个“如何生成所有排列”的问题,这里有很多问题。我已经看了很多,但我的具体问题不再进一步。

给定一个整数

n
,我想生成一个
List<int[]>
int[n*n]
其中每个列表包含从 1 到
n
的整数的唯一排列。

所以如果

n
是2,我想看到16个数组,如下...

[1,1,1,1],
[1,1,1,2],
[1,1,1,3],
[1,1,1,4],
[1,1,2,1],
[1,1,2,2],
...etc
[4,4,4,1],
[4,4,4,2],
[4,4,4,3],
[4,4,4,4],

对于这种特定情况,可以通过以下方式实现...

Enumerable.Range(1, 2)
  .SelectMany(n1 => Enumerable.Range(1, 2)
    .SelectMany(n2 => Enumerable.Range(1, 2)
      .SelectMany(n3 => Enumerable.Range(1, 2)
        .Select(n4 => new[] { n1, n2, n3, n4 }))))
  .ToList()

但是,除了笨拙之外,这是针对数字 2 的硬编码。如果我想对 3 做同样的事情,我需要有 9

SelectMany
行,依此类推。我想要一个灵活的解决方案,适用于传入的任何数字。

我见过的所有其他问题只需要 1 到

n
的所有排列,即
n
数组的集合,每个数组的长度为
n
。我的情况需要
n*n
数组,每个数组的长度为
n*n
.

有人能帮忙吗?谢谢

c# permutation
© www.soinside.com 2019 - 2024. All rights reserved.