질문과 답변

Extra Form

2차원배열(사실 다차원배열)이 필요한데 루비스크립트로 선언하는 방법과 사용방법좀

알려주세요.

 

 

 

 

 

 

 

 

 

 

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.

Who's A구몽

profile

닉네임 변경

6º   ->  A구몽

Comment '10'
  • ?
    LuD 2016.04.01 14:18

    루비는 따로 선언이 없습니다.
    변수 = 내용
    이라고 하면 되는거라서 단지 내용이 배열이 되면 되는거죠.
    내용이 된 배열의 각 항목 값을 다시 배열로 하면 다차원 배열이 되겠네요.
    변수 = [[[[내용]]]] 이런식으로 여러번 하면 다차원 배열이 되겠죠;;;

    ary = []
    이렇게 하면 1차원 배열이고 ary[0] 과 같이 접근합니다.

    ary = [[],[],...,[]]
    이런식으로 하면 2차원 배열이 되겠죠.
    ary[0][0] 과 같은 식으로 쓸 수 있습니다.

    배열안에 배열을 얼마나 중첩시켜서 넣느냐에 따라서 2차원 ~ 다차원 배열까지도 사용할 수 있겠네요.

    v1 = [1,2,3]
    v2 = [4,5,6]
    v3 = [7,8,9]
    v4 = [v1, v2, v3] 이렇게 선언해서 v4[1][2] == 6 이 되는것 처럼
    배열이 값인 변수를 배열의 값으로 받아도 다차원 배열이 될 수 있습니다.

    v5 = [v4, [10,11,12], "배열", 0] 그리고 이런식으로 배열의 각 항목이 다른형식이라도 상관없죠;;

     

    v5[0][1][2]  #=>   6

    v5[1][0]     #=>  10

    v5[2]        #=>  "배열"

    v5[3] + 1  #=>   1

  • profile
    A구몽 2016.04.01 14:39
    ar = [[[0]]] 으로 하면 3차원 배열이 생성되고
    ar[2][10][20]가 빈자리이므로 nil을 반환하는건가요? 아니면 아예 에러가 뜨나요?
  • ?
    LuD 2016.04.01 15:20
    그렇게 하면 안타깝게도 에러가 뜨겠네요;
    ar[2] 가 이미 nil 이기 때문에 nil 에서 [10] 이라는걸 찾을수가 없다는 에러일듯 한데..
    직접 해보면 알듯 하지만;;;
  • profile
    A구몽 2016.04.01 14:44
    대충 ar[3][14][7][5] 정도의 크기의 배열을 쓰고싶은데 크기를 지정해놓을 순 없나요?
    직접 대입선언을 하기에는 번거로울 것 같아서요.
  • ?
    LuD 2016.04.01 15:28
    선언을 해줄수도 있습니다.
    ary = Array.new 로 선언을 할 수도 있고
    ary = Array.new(size) 혹은 Array.new(size, value) 식으로 할수도 있어요.
    아무것도 없으면 빈 배열 []
    size가 있으면 size크기의 nil이 채워진 배열이고 value 가 있으면 value값으로 채워진 size 크기의 배열이겠네요.
    아니면 Array.new(size) {|index| index} 식으로 할수도 있죠
    ary = Array.new(5) {|i| i * 2} 라고 하면
    ary #=> [0,2,4,6,8] 이 되겠네요.

    자세한건 도움말(색인)에서 Array 부분 찾아보면 있습니다.

    3, 14, 7, 5 사이즈의 0으로 채워진 배열을 만드려면...;;
    ary = Array.new(3,Array.new(14,Array.new(7,Array.new(5,0)))) 이렇게 하면 되나?;;
  • profile
    A구몽 2016.04.01 16:46
    아 감사합니다. ㅎㅎ
  • profile
    A구몽 2016.04.12 09:39

    ary = Array.new(5, Array.new(5)) 와 같이 2차원 혹은 다차원 배열을 선언하는 것에는 논리적인 오류가 있었습니다.(제작자가 다른 쓰임새 때문에 의도한 것일지도 모르지만.)

    만약 ary[2][0] = 6 을 처리하면, 루비는 ary[0][0] = 6, ary[1][0] = 6, ary[2][0] = 6, ary[3][0] = 6, ary[4][0] = 6 의 처리를 실행합니다.
    따라서 Array.new(5, Array.new(5)) 방식으로 2차원 배열을 선언하면 활용성은 1차원 배열과 같아지며 일반적인 2차원 배열로써 활용 불가능합니다.
    하지만 ary = Array.new(5)
    ary[0] = Array.new(5), ary[1] = Array.new(5) ...(생략)... ary[4] = Array.new(5) 처럼 선언 할 경우에는 일반적인 2차원 배열을 만들 수 있게 됩니다. 이 경우에는 ary[2][0] = 6 을 처리해도 다른 값에 영향이 가지 않습니다.
    따라서 일반적인 다차원 배열은 반복문으로 선언해야하더군요.

    이거 해결하느라 고생좀 했네요.

  • ?
    LuD 2016.04.12 15:58

    아하..그렇구나...
    저같은 경우는 선언의 필요성을 못느껴서 Array.new 라는것도 도움말 보고 알았네요.
    그래서 위에 답변도 되나? 라는 의문형식으로 찝찝하게 끝맺었는데...;;

    그 전에 배열 크기를 꼭 정해놓고 써야 하는건가? 라는 의문이 있지만...
    일단 해결하셨다니 다행이네요^^;

  • ?
    LuD 2016.04.12 16:19
    방금 해봤는데...
    ary = Array.new(3) { Array.new(4) } 이런식으로 Array.new(size) {value} 형식으로 해주면 되네요.
    그렇게 하면 각각의 개체를 가지는 배열이 선언되네요.

    응용하면 고생을 조금 줄일 수 있을것 같습니다.
  • profile
    A구몽 2016.05.09 01:59
    그렇군요. 한동안 접속을 안해서 이제봤네요.
    감사합니다.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12448
RMVXA 해상도를 바꾸면서 플레이 할 수는 없을까요? 1 2034 2014.09.16 565
RMVXA 허걱 님이 올려주신 이름 + 마우스 질문 1 file tony 2012.12.27 966
RMVXA 허걱님의 대화창 스크립트 중 캐릭이름이 뜨는 윈도우창의 수정 방법 질문드립니다. 2 비형 2015.07.20 421
RMVXA 허걱님의 마우스 스크립트에서 모든 이벤트 클릭시를 특정 이벤트로만으로 바꾸고 싶습니다. file 흰강아지 2014.12.23 270
RMVXA 허걱님의 셀프 변수 스크립트를 쓰는데 좌표가... 무명시절 2017.06.09 141
에러 해결 RMVXA 허걱님의 전체키 스크립트를 쓰고 있었는데 오류가 납니다. DefaultName 2023.05.21 49
RMVXA 허걱님의 전체키 입력 확장 스크립트 오류 해결방법 문의 3 file 명란젓 2014.01.26 1313
RMVXA 허걱님이 만드신 마우스스크립트 아러리 2013.10.09 1058
RMVXA 허걱님이 제작하신 마우스입력 스크립트에서 좌표값 가져오기. 5 무르무르 2013.03.08 969
RMVXA 현대 시대와 관련된 캐릭터 칩셋 없나요? 2 regidia89 2016.11.09 229
RMVXA 현재 VX Ace 버전의 [오메가 퀘스트] 스크립트는 없나요? 1 세븐체크 2012.07.05 1546
스크립트 작성 RMVXA 현재 장착하고있는 무기의 id는 어떻게 적나요? 2 딱딱이 2020.02.26 58
RMVXA 현재 재생중인 bgm의 크기를 변동하는 방법이 있나요 입개르 2013.04.23 1176
RMVXA 호러게임에서 엔딩을 넣고십습니다 1 MwalVa 2014.07.06 1007
이벤트 작성 RMVXA 호로로의 산소같은 게이지 만들기 2 넹글 2022.03.25 210
RMVXA 혹시 VX ACE 예제 맵칩 스샷 찍어주실수 있으신분? 잠행인 2015.12.20 100
RMVXA 혹시 VX Ace용 타이틀 스킵 스크립트는 없나요? 1 채류인 2014.04.12 1064
RMVXA 혹시 마을채로 공유하는 곳도 있나요? 4 비비드 2012.02.18 2007
RMVXA 혹시 맵 순서를 변경하는 방법이 있나요? 2 버너코코넛 2018.08.25 259
RMVXA 혹시 새 창을 여는방법이 있나요? 10 file Sonrxnu 2016.03.11 222
Board Pagination Prev 1 ... 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 Next
/ 149