2010-05-24 4 views
1

없이 int 치의리스트에 값을 할당이 할 수있는 짧은 방법이 :초기화 및 루프

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

기능 버전은 C#에서 사용 가능한 경우 감사도 F # 버전에 감사드립니다.

답변

9

F 번호 :

open System.Collections.Generic 
let r = new List<_>([1..60]) 

C 번호 : 이것은 C# 버전을 위해 그것을 할 것

var r = new List<int>(Enumerable.Range(1, 60)); 
+0

왜 'let r = new List <_> (seq {1..60})'이 아니겠습니까? – gradbot

+0

괜찮습니다. 또는 Enumerable.Range, C# 에서처럼. 또는 다른 것들을 잔뜩. 질문이 '짧다'는 질문을 했으므로 간략히 설명하려고했습니다. – Brian

2

List<_> (C#의 경우)은 연결된 목록이 아니라 동적 배열입니다. F #에서 List<_>ResizeArray<_>입니다. 당신은 ResizeArray 모듈을 사용할 수 있습니다

let mins = new ResizeArray<int>() 
for i=0 to 60-1 do 
    mins.Add(i+1) 

:

가 여기에 직접 번역 F # 버전 년대 ResizeArray < _> 형식이 F # 핵심에 정의되어 있는지

#r "FSharp.PowerPack.dll" 
let mins = ResizeArray.init 60 (fun i -> i+1) 

공지 사항을, 같은 이름의 모듈입니다 F # PowerPack에서.

3

: 내부적으로

List<int> mins = Enumerable.Range(1, 60).ToList(); 

것이다그 루프, 틀림없이. IEnumerable<int>이 만족 스럽다면 ToList 전화를 울리면 게으른 평가가 표시됩니다.

[ 1 .. 60 ] |> ResizeArray.ofSeq 

이 명시 적으로 생성자를 호출과 동일하지만, 조금 더 좋은 구문을 (가지고 : 당신은 이미 내가

F 번호에
4

, 아마 작성합니다 :) 참조 이제 F 번호 버전이 있어요 파이프 라이닝을 사용할 수 있으며 생성자의 유형 매개 변수를 지정할 필요가 없습니다.