배열을 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이다. 그러나 더 재미있는 방법이 있습니까?
배열을 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이다. 그러나 더 재미있는 방법이 있습니까?
이 이미 존재는 (IEnumerable을 반환하지만 그건 당신이 필요로하는 경우 변경할 수있을만큼 쉽다) :
arr = Enumerable.Range(0, n);
.ToArray()를 추가해야합니다. –
내 마음에서 가장 흥미로운 방법은 배열을하지 생산하지만, 같은 번호를 열거 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()
으로 이것을 사용하여 '정상'배열을 얻을 수도 있습니다.
가장 좋은 대답은 당신이 배열이 필요한 이유에 따라 달라집니다. 것은 모든 배열 요소의 값이 색인과 동일하므로 모든 요소에 액세스하는 것이 본질적으로 중복 연산임을 의미합니다. 왜 인덱스의 값을 반환하는 인덱서가있는 클래스를 사용하지 않습니까? 실제 어레이와 구별 할 수 없으며 설정에 시간이없고 메모리가 필요하지 않다는 점을 제외하면 어떤 크기로도 확장 할 수 있습니다. 그러나 나는 그것이 속도와 소형이 아니라는 느낌을받습니다. 어쩌면 문제를 확대하면 더 나은 해결책이 더 분명해질 것입니다.
일종의 기능 구현을 할 수 있습니다. 목록을 채우고 ToArray를 사용할 수 있습니다. 궁극적으로 문제가 흥미롭지 않기 때문에 흥미로운 해결책이 없다고 생각합니다. –
BobbyShaftoe
배열로 무엇을 하시겠습니까? 나는 configurator의 솔루션을 좋아한다. ... – n8wrl
사실 내 솔루션은 Enumerable.Range (0, n)과 같은 결과를 준다. 잠시 동안 그 방법을 잊었다. – configurator