질문과 답변

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 12446
RMXP 8방향 대각선 모션 넣는방법이 궁금합니다. 2 file 스페이스덕 2014.01.18 1144
RMVXA 8방향 .적용방법을 모르겠어요.. 3 뉴트리리 2015.01.03 229
기타 6월 1일 아방스? 8월 18일 리뷰의 날??? 이것들은 또 무슨 날이죠? 1 file 阿房S 2016.02.15 184
RMVXA 640X480 해상도시 전투돌입화면에 대한 질문입니다. 4 file 미리아르도 2013.06.06 1160
RMVXA 5인 이상의 파티원을 마음대로 변경하고 싶습니다.(KGC아니고) 1 나오프 2014.05.03 616
플러그인 추천 RMMZ 5명 이상 파티원 대열보행을 하는법이 궁금합니다. 로레니 2023.05.15 36
RMMV 4칸짜리 책장을 어떻게 움기죠?? 5 file 대나무빵 2017.10.24 227
스크립트 사용 RMVXA 4개 이상 선택지 스크립트 오류 3 file 무해 2021.12.28 88
기타 3달동안만든게임데이터가다날라가버렸습니다. 5 고자거북이 2011.07.22 1180
RMXP 3d로 간단하게 스크립트만들때 까멸 2011.12.15 1906
RMVX 3D 던전 스크립트 사용법을 전혀 모르겠습니다. 3 regidia89 2012.03.11 2135
기타 3D 게임에 알만툴 대화방식 할수있나요? 2 이리나 2015.06.11 210
기타 3D Bilder 타일 이동 질문 3 KIMj 2011.01.30 1036
RMMV 2회차/ 멀티엔딩 제작법 3 ∃rrorcOd∃:716 2018.05.19 1371
RMVX 2회차 클리어 시 타이틀을 바꾸는 스크립트를 알려주세요. 슈트롱 2014.11.04 538
RM2k3 2회차 이벤트를 만들 수 있나요? 1 아델르 2013.05.08 1047
RMVXA 2회차 3회차 같은거... 1 해지등 2016.10.27 285
RMVXA 2차원 배열 선언 및 사용법좀 알려주세요. 10 A구몽 2016.04.01 269
2시간째 붙잡고 있는데 한글 패치 적용이 안됩니다ㅠㅜ 설기 2017.01.01 185
플러그인 추천 RMMV 2명의 캐릭터가 말하는 것처럼... 무명시절 2019.08.28 131
Board Pagination Prev 1 ... 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 Next
/ 516