BlockChain/Solidity

[Solidity] CryptoZombie - 챕터 3-12 for 반복문 리뷰

Sonny Cucumber 2021. 12. 6. 11:54

이게 답인데

function getZombiesByOwner(address _owner) external view returns(uint[]) {
    uint[] memory result = new uint[](ownerZombieCount[_owner]);
    uint counter = 0;
    for (uint i = 0; i < zombies.length; i++) {
      if (zombieToOwner[i] == _owner) {
        result[counter] = i;
        counter++;
      }
    }
    return result;
  }

조금 헷갈리는 부분이 있어서 다시 리뷰해보면,

if 문 안의 i가 아니라 zombies.id로 넣어서 틀렸었다.

 

그 전에 코드를 제대로 이해하지 못해서 틀렸는데

uint배열이 생성될 때 길이는 (솔리디티에서는 memory 배열은 가스비 때문에 길이를 정해줘야한다)

ownerZombieCount[_owner] 라는 임포트한 코드 안에서

매핑으로 되어있는데 이것이 mapping (address ⇒ uint) 이기 때문에

주소를 넣으면 uint를 반환한다.

 

result는 해당 주소가 가지고 있는 좀비의 수 만큼의 배열이니,

for 문을 통해 조건문으로 전체 리스트(zombies)를 i번째와 주인이 같은지를 걸러내서

result의 counter번째마다 i를 넣어주고

몇개있는지 counter도 만족할 때마다 1씩 올려줘야한다

 

해당링크 https://cryptozombies.io/ko/lesson/3/chapter/12