리스트에서 Index가 짝수인 리스트와 홀수인 리스트 분리하기

2024년 10월 16일

1. Code Block을 활용한 짝수/홀수 인덱스 분리

리스트를 관리하다 보면 인덱스가 짝수인 것과 홀수인 것을 분리해야 할 때가 있습니다. 분리하는 방법은 여러가지가 있지만 개인적으로는 코드 블록을 쓰는 것이 편해서 코드 블록을 자주 사용하고 있습니다. 코드 블록을 사용하면 직접적으로 리스트의 항목을 다룰 수 있습니다.

사용 방법

다이나모, 코드 블록의 활용
이미지 1. 코드블록의 활용 ⓒ디지털디자인포럼
  1. List.Count 노드로 리스트의 전체 항목 수를 구합니다.
  2. Code Block을 이용해 짝수 인덱스와 홀수 인덱스를 생성합니다.
  3. 리스트를 List.GetItemAtIndex 노드에 연결하면, 짝수와 홀수 항목을 쉽게 분리할 수 있습니다.

2. TakeEveryNthItem 노드를 사용한 분리

다른 방법으로는 TakeEveryNthItem 노드를 사용해서 리스트에서 N번째 항목을 추출할 수 있습니다.

사용 방법

  • 간격인 n 값에 2를 입력하여 짝수, 홀수를 구분합니다.
  • Offset = 1:
    • 간격의 시작점이 1번 인덱스부터 시작하고 1번 인덱스를 포함해서 2간격으로 리스트가 선택 되기 때문에 2,4,6,8,… 번 인덱스가 선택됩니다.
    • 마지막까지 계산이 끝나면 리스트는 처음으로 돌아가서, 다시 1번 간격으로 계산을 이어갑니다. 그렇기 때문에 0번 인덱스가 다시 포함됩니다. 리스트가 ‘래핑(wrapping)’되는 과정입니다.
    • 결과: 짝수 인덱스의 데이터를 반환함. 예를 들어: [A, C, E, G, …]
  • Offset = 0:
    • 오프셋 없이 0번 인덱스에서 시작하고 0번 인덱스를 포함해서 2간격으로 리스트가 선택 되기 때문에 1, 3, 5, 7, 9, … 번 인덱스가 선택됩니다.
    • 결과: 홀수 인덱스의 데이터를 반환함. 예를 들어: [ B, D, F, H, …]
List.TakeEveryNthItem
이미지 2. List.TakeEveryNthItem ⓒ디지털디자인포럼

3. DropEveryNthItem 노드를 사용한 분리

DropEveryNthItem 노드는 TakeEveryNthItem과 반대 개념입니다. 특정 인덱스 항목을 제거하고 남은 리스트를 반환합니다.

사용 방법

  • 간격인 n 값에 2를 입력하여 분리합니다
  • Offset = 1:
    • 간격의 시작점이 1번 인덱스부터 시작하고 1번 인덱스를 포함해서 2간격으로 리스트가 선택 되기 때문에 2,4,6,8,… 번 인덱스가 제거됩니다.
    • 마지막까지 계산이 끝나면 리스트는 처음으로 돌아가서, 다시 1 까지 계산을 이어갑니다. 그렇기 때문에 0번 인덱스가 제거됩니다. 리스트가 ‘래핑(wrapping)’되는 과정입니다.
    • 결과: 짝수 인덱스의 데이터를 반환함. 예를 들어: [ B, D, F, H, …]
  • Offset = 0:
    • 간격의 시작점이 0번 인덱스부터 시작하고 0번 인덱스를 포함해서 2간격으로 리스트가 선택 되기 때문에 1,3,5,7,… 번 인덱스가 제거됩니다.
    • 결과: 짝수 인덱스의 데이터를 반환함. 예를 들어: [A, C, E, G, …]
List.DropEveryNthItem
이미지 3. List.DropEveryNthItem ⓒ디지털디자인포럼

4.정리

TakeEveryNthItemDropEveryNthItem 노드는 같은 입력값을 사용하지만, 서로 다른 방식으로 리스트를 처리합니다. 상황에 맞는 방법을 선택하여 리스트를 분리해보세요!


답글 남기기


관련 포스트

  • 다이나모에서 구성평면과 벡터 크기 및 방향 확인하는 방법

  • Curve 지오메트리 등분하기

  • 다이나모에서 데이터 타입(Data Type) 이해하기

  • 다이나모에서 리스트 분할하기: List.Chop 및 List.Slice 노드 사용법

  • 다이나모에서 특정 Index의 Item 추출 또는 특정 Item의 Index 추출하기

  • Dynamo에서 True값과 False값 구분하기: List.FilterByBoolMask 사용법

  • Dynamo에서 유형 파라미터 vs 인스턴스 파라미터: 차이점과 사용법

  • Dynamo에서 n번째 항까지의 총합 구하기: List.Scan 사용법