6.6 배열 컴프리헨션(Array Comprehension)

6.6 배열 컴프리헨션(Array Comprehension)

Haxe의 배열 컴프리헨션은 배열 선언(array declaration)과 루프를 결합해 배열을 간결하게 초기화하게 해줍니다. for 또는 while 구조로 식별됩니다:

class Main {
  static public function main() {
    var a = [for (i in 0...10) i];
    trace(a); // [0,1,2,3,4,5,6,7,8,9]

    var i = 0;
    var b = [while (i < 10) i++];
    trace(b); // [0,1,2,3,4,5,6,7,8,9]
  }
}

변수 a는 숫자 0부터 9까지를 담는 배열로 초기화됩니다. 컴파일러는 각 루프 반복의 값을 배열에 더하는 코드를 생성하므로, 다음 코드와 동등합니다:

var a = [];
for (i in 0...10) a.push(i);

변수 b는 같은 값을 담지만 for 대신 while을 사용하는 다른 컴프리헨션 스타일을 통해 초기화됩니다. 역시 다음 코드와 동등합니다:

var i = 0;
var b = [];
while(i < 10) b.push(i++);

루프 표현식은 조건과 중첩 루프를 포함한 어떤 것이든 될 수 있어, 다음은 기대대로 동작합니다:

class Main {
  static public function main() {
    var a = [
      for (a in 1...11)
        for (b in 2...4)
          if (a % b == 0)
            a + "/" + b
    ];
    // [2/2,3/3,4/2,6/2,6/3,8/2,9/3,10/2]
    trace(a);
  }
}

출처: Array Comprehension

본문

for/while 컴프리헨션

[for (i in 0...10) i]는 루프 반복 값을 배열에 담아 초기화합니다. while 또한 가능해요. 컴파일러가 각 반복 값을 push하는 코드를 생성합니다.

조건 및 중첩

루프 표현식은 조건(if)과 중첩 루프를 포함할 수 있어, 예시처럼 필터링된 결과 배열을 만들 수 있어요.

더 알아보기