如何生成数字列表列表?

时间:2011-01-26 09:56:07

标签: c#

我想生成一个列表,如下所示。我怎么能在C#中做到这一点?

List<List<int>> data = {{0,0,0,0}, {0,0,0,1}, {0,0,0,2}, ..., {9,9,9,9}};

4 个答案:

答案 0 :(得分:12)

试试这个。

var numbers = Enumerable.Range(0, 10);
var data = (from a in numbers
            from b in numbers
            from c in numbers
            from d in numbers
            select new List<int>() { a, b, c, d }).ToList();

答案 1 :(得分:3)

另一种选择......

var data = Enumerable.Range(0, 10000)
                     .Select(x => new List<int>
                         { x / 1000, (x / 100) % 10, (x / 10) % 10, x % 10 })
                     .ToList();

如果你想生成任意数量的数字,你可以这样做:

int n = 4;  // number of digits

var data = Enumerable.Range(0, (int)Math.Pow(10, n))
                     .Select(x =>
                         Enumerable.Range(1, n)
                                   .Select(y =>
                                       (x / (int)Math.Pow(10, n - y)) % 10)
                                   .ToList())
                     .ToList();

答案 2 :(得分:1)

由于您事先知道列表的大小,我更喜欢原生的二维数组。代码如下所示:

        var data = new int[10000, 4];

        for (int i = 0; i < 10000; i++)
        {
            data[i,0] = (i / 1000);
            data[i,1] = (i / 100) % 10;
            data[i,2] = (i / 10) % 10;
            data[i,3] = i % 10;
        }

答案 3 :(得分:0)

简单而'愚蠢'的解决方案:

List<List<int>> data = new List<List<int>>();

int i;
int k;
int l;
int m;

for(i=0; i<10; i++){
    data.add(new List<int>);
    data[i].add(i);
    for(k=0; k<10; k++){
        data[i].add(k);
        for(l=0; l<10; k++){
        data[i].add(l);    
           for(m=0; m<10; k++){
           data[i].add(m);
           }
        }
    }
}

未经测试,但应该完成工作的最大部分 - 如果你要填充一个列表,其中包含从{0,0,0,0}到{9,9的所有数字, 9,9}