在.NET中填充整数列表


74

我需要一个从1到x的整数列表,其中x由用户设置。我可以使用for循环来构建它,例如,假设x是先前设置的整数:

List<int> iList = new List<int>();
for (int i = 1; i <= x; i++)
{
    iList.Add(i);
}

这似乎很愚蠢,肯定有更优雅的方法可以做到这一点,例如PHP range方法

Answers:


94

如果使用的是.Net 3.5,则需要Enumerable.Range

生成指定范围内的整数序列。


3
这将返回IEnumerable <int>,而不是List <int>,因此,如aku所述,您需要在Enumerable.Range(x,y)调用中调用.ToList()。
Daniel Jennings

1
通常最好使用IEnumerable <>以获得最大的灵活性。特别是如果此列表没有更改,则很可能不需要使用通用List <T>
Simon_Weaver

为什么范围方法比仅以条件为最大值进行简单的for循环更优雅?
2015年

1
恕我直言,很明显,var List = new List <int>(Max-Min); 对于(var Index = Min; Index <Max; ++ Index)List.Add(Index); 不适合Enumerable.Range(Min,Max);
Massimiliano Carosi '16年

45

LINQ解救:

// Adding value to existing list
var list = new List<int>();
list.AddRange(Enumerable.Range(1, x));

// Creating new list
var list = Enumerable.Range(1, x).ToList();

LINQ 101上查看发电运营商


18

我是写过ruby-esque To扩展方法博客的众多人之一,如果您使用的是C#3.0,则可以编写该方法:


public static class IntegerExtensions
{
    public static IEnumerable<int> To(this int first, int last)
    {
        for (int i = first; i <= last; i++)
{ yield return i; } } }

然后您可以像这样创建整数列表

List<int> = first.To(last).ToList();

要么

List<int> = 1.To(x).ToList();


1
其他答案更有可能是发问者想要的东西,但我在这里投票是因为我喜欢由此产生的语法。与“ 1.To(10)”相比,您可以获得多少可读性?
Jay Bazuzi

0

这是一个返回整数列表的简短方法。

    public static List<int> MakeSequence(int startingValue, int sequenceLength)
    {
        return Enumerable.Range(startingValue, sequenceLength).ToList<int>();
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.