앱인벤터/Tips

앱인벤터 Tips ::: 리스트 섞기

이지이지(EGEasy) 2022. 1. 10. 15:25

리스트 섞기 예제

 

 

안녕하세요. 이지이지입니다.

이번 포스팅에서는 앱인벤터에서 리스트를 무작위로 섞는 방법에 대해 알아보도록 하겠습니다.

 

앱인벤터에서는 아쉽게도 리스트를 섞는 블록이 없어 직접 블록으로 만드는 수 밖에 없습니다.

 

리스트를 섞는 알고리즘은 여러가지가 있을 수 있는데, 제가 사용하는 방법에 대해 알려드립니다.

 

다음 소스를 내려받아 참고하시구요. 

 

EG_ShuffleList.aia
0.00MB

 

 

그냥 단순히 리스트를 섞어보기만 원하시는 분께서는

다음 빨간색 네모 부분을 섞기 원하는 리스트로 바꾸시면 됩니다.

 

수정 부분

 

    블록 코딩

 

다음은 예를 들어 보일 리스트 항목과, 화면이 처음 실행되었을 때 실행되는 블록입니다.

따로 설명은 하지 않겠습니다.

 

최초 리스트와 화면이 처음 실행되었을 때 실행되는 블록

 

 


 

다음은 새로운 리스트를 저장할 변수와 [섞기] 버튼을 클릭했을 때 실행되는 블록입니다.

 

새로운 리스트 초기설정 및 [섞기] 버튼을 클릭했을 때 실행되는 블록

 

① 최초 리스트를 섞은 다음 넣어 둘 리스트 변수 newList를 만들고 처음에는 빈 리스트를 저장해둡니다.

 

② [섞기](btn_shuffle) 버튼을 클릭했을 때,

 

③ Shuffle 프로시저를 호출합니다.

→ 매개변수 toChangeList에 섞고자 하는 최초의 리스트를 입력합니다.

 

④ lbl_newResult 컴포넌트의 텍스트에 새로운 리스트 newList의 값을 텍스트로 변환하여 표시합니다.

 

 


 

다음은 가장 중요한 섞기 알고리즘을 가지고 있는 Shuffle 프로시저에 대한 블록입니다.

 

Shuffle 프로시저

※ originalList(최초 리스트)가 ["가지", "나무", "다리", "라면", "마음"]이라는 가정하에 설명드립니다. 

 

 

① Shuffle 프로시저에 매개변수 toChangeList를 만들어둡니다.

→ 프로시저에 매개변수를 두는 이유는 프로시저의 do 블록 안에서 다른 블록은 모두 같지만, 하나의 요소만 다를 경우에 매개변수를 두고 이 부분만 변하게 하기 위함입니다.

→ 예를 들어 빵을 만드는 과정을 담아둔 BakeBread 프로시저가 있고, 사용자마다 빵을 만드는 개수가 다를 경우에 numbers라는 매개변수를 두어, 만들고자 하는 빵의 개수만 달리하는 것입니다.

→ 경우에 따라서 A라는 리스트를 섞고자 할 수도 있고, B라는 리스트를 섞고자 하는 경우가 있을 것이기 때문에 예제 앱에서는 toChangeList라는 매개변수를 둔 것입니다.

 

② 지역변수 tempIndexList를 만들고 빈 리스트를 저장해둡니다.

 

③ 지역변수 tempNewList를 만들고 빈 리스트를 저장해둡니다.

 

④ tmpeIndexList의 항목의 개수가 toChangeList의 항목 개수보다 작으면 계속 do안의 블록을 실행합니다.

→ btn_shuffle.Click 블록 설명에서 매개변수 toChangeList에 originalList를 넣었으므로 toChangeList의 항목개수는 5가됩니다.

 

⑤ 지역변수 randomNo를 만들고 1부터 toChangeList의 항목 개수 사이의 숫자를 랜덤으로 추출한 값을 저장해둡니다.

→ 1부터 5사이의 랜덤 숫자를 발생하게 됩니다. 여기서는 3이 나왔다고 가정해 보겠습니다.

 

⑥~⑦ 만약 randomNo가 tempIndexList에 포함되어 있지 않다면, randomNo를 tempIndexList에 추가합니다.

→ tempIndexList는 [3]이 됩니다.

→ 최종적으로 toChangeList의 개수 만큼 난수가 발생하므로 tempIndexList에는 [3, 숫자, 숫자, 숫자, 숫자]가 저장됩니다. 

 

⑧ tempNewList에 toChangeList(최초 리스트)의 randomNo 순서에 있는 값을 추가합니다.

→ tempNewList에는 toChangeList의 세 번째 항목 ["다리"]가 추가됩니다.

→ 최종적으로 toChangeList의 개수 만큼 난수가 발생하므로 tempNewList에는 ["다리", "항목", "항목", "항목", "항목"]가 저장됩니다. 

 

⑨ newList에 tempNewList의 값을 저장합니다.

 

 


 

이상 앱인벤터에서 리스트를 섞는 방법에 대한 포스팅이었습니다.

유용하게 사용하시고, 이를 바탕으로 더 좋은 알고리즘도 생각해 적용해보시기 바랍니다.~~~