2009-05-12 4 views
4

배열을 0에서 임의의 숫자로 채우는 방법을 찾고 있습니다..NET에서 0에서 n까지의 int 배열을 얻는 방법

var arr = int[n]; 
for(int i = 0; i < n; i++) 
{ 
    arr[i] = i; 
} 

그리고이 방법은 Array 클래스에 대한 확장 된 수 있습니다 : 예를 들어, 0에서 12 1999, 물론 등

에, 거기 for -loop이다. 그러나 더 재미있는 방법이 있습니까?

+1

일종의 기능 구현을 할 수 있습니다. 목록 을 채우고 ToArray를 사용할 수 있습니다. 궁극적으로 문제가 흥미롭지 않기 때문에 흥미로운 해결책이 없다고 생각합니다. – BobbyShaftoe

+0

배열로 무엇을 하시겠습니까? 나는 configurator의 솔루션을 좋아한다. ... – n8wrl

+0

사실 내 솔루션은 Enumerable.Range (0, n)과 같은 결과를 준다. 잠시 동안 그 방법을 잊었다. – configurator

답변

29

이 이미 존재는 (IEnumerable을 반환하지만 그건 당신이 필요로하는 경우 변경할 수있을만큼 쉽다) :

arr = Enumerable.Range(0, n); 
+2

.ToArray()를 추가해야합니다. –

6

내 마음에서 가장 흥미로운 방법은 배열을하지 생산하지만, 같은 번호를 열거 IEnumerable<int> - 그것은 실제 루프의 실행을 연기 이후는 O (1) 설정 시간의 이점이있다 :

public IEnumerable<int> GetNumbers(int max) { 
    for (int i = 0; i < max; i++) 
     yield return i; 
} 

이 루프는 0에서 max-1까지의 모든 숫자를 한 번에 하나씩 반환하지만 실제로 필요할 때만 루프를 통과합니다.

GetNumbers(max).ToArray()으로 이것을 사용하여 '정상'배열을 얻을 수도 있습니다.

1

가장 좋은 대답은 당신이 배열이 필요한 이유에 따라 달라집니다. 것은 모든 배열 요소의 값이 색인과 동일하므로 모든 요소에 액세스하는 것이 본질적으로 중복 연산임을 의미합니다. 왜 인덱스의 값을 반환하는 인덱서가있는 클래스를 사용하지 않습니까? 실제 어레이와 구별 할 수 없으며 설정에 시간이없고 메모리가 필요하지 않다는 점을 제외하면 어떤 크기로도 확장 할 수 있습니다. 그러나 나는 그것이 속도와 소형이 아니라는 느낌을받습니다. 어쩌면 문제를 확대하면 더 나은 해결책이 더 분명해질 것입니다.

관련 문제