通过重复生成序列号

时间:2014-08-13 03:58:24

标签: c# linq sequence

我有以下代码:

var result = AllSequences(1, 10, 3);

public static IEnumerable<List<int>> AllSequences(int start, int end, int size)
{
    if (size == 0)
        return Enumerable.Repeat<List<int>>(new List<int>(), 1);

    return from i in Enumerable.Range(start, end - size - start + 2)
           from seq in AllSequences(i, end, size - 1)
           select new List<int> { i }.Concat(seq).ToList();
}

结果:

1,1,1
1,1,2
1,1,3
1,1,4
....
2,2,2
2,2,3
2,2,4

但在开始这个序列之前,希望你是这样的:

2,1,1
2,1,2
2,1,3
2,1,4
.....

我在生成序列时遇到了麻烦,我正在使用LINQ在此循环中获得性能

1 个答案:

答案 0 :(得分:0)

我对你的问题感到有些困惑,但是如果你想让序列贯穿从1到10的每个数字,对于所有的排列尝试这样的事情。

我不是在这里提倡使用LINQ,只是尝试尽可能少地修改代码。

    public static IEnumerable<List<int>> AllSequences(int start, int end, int size)
    {
        if (size == 0)
            return Enumerable.Repeat<List<int>>(new List<int>(), 1);

        return from i in Enumerable.Range(start, end)
               from seq in AllSequences(start, end, size - 1)
               select new List<int> { i }.Concat(seq).ToList();
    }

结果将是

1, 1, 1
1, 1, 2
... etc
1, 1, 10
1, 2, 1
1, 2, 2
... etc
1, 10, 8
1, 10, 9
1, 10, 10
2, 1, 1
2, 1, 2 
.... etc
10, 10, 10