有更短的方法可以做到这一点:
List<int> mins = new List<int>();
for(int i = 0; i<60; i++)
{
mins.Add(i+1);
}
功能版本也很受欢迎,如果在c#中可用,也欢迎f#版本。
答案 0 :(得分:9)
F#:
open System.Collections.Generic
let r = new List<_>( [1..60] )
C#:
var r = new List<int>(Enumerable.Range(1, 60));
答案 1 :(得分:4)
在F#中,我可能会写:
[ 1 .. 60 ] |> ResizeArray.ofSeq
这与显式调用构造函数相同,但它有一个更好的语法(您可以使用流水线操作,而不需要指定构造函数的类型参数)。
答案 2 :(得分:3)
这可以用于C#版本:
List<int> mins = Enumerable.Range(1, 60).ToList();
将内部循环,诚然。如果您对IEnumerable<int>
感到满意,只需敲除ToList
来电,您就会得到懒惰的评价。你现在已经有了F#版本,我看到了:)
答案 3 :(得分:2)
List<_>
是一个动态数组,而不是链表。在F#中,List<_>
为ResizeArray<_>
。
这是直接翻译的F#版本:
let mins = new ResizeArray<int> ()
for i=0 to 60-1 do
mins.Add(i+1)
您可以使用ResizeArray
模块:
#r "FSharp.PowerPack.dll"
let mins = ResizeArray.init 60 (fun i -> i+1)
请注意ResizeArray&lt; _&gt; type在F#Core中定义,同名模块在F#PowerPack中。