初始化并将值分配给没有循环的整数列表

时间:2010-05-24 05:18:39

标签: c# f#

有更短的方法可以做到这一点:

        List<int> mins = new List<int>();
        for(int i = 0; i<60; i++)
        {
            mins.Add(i+1);
        }

功能版本也很受欢迎,如果在c#中可用,也欢迎f#版本。

4 个答案:

答案 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)

C#中的

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中。