Шавқовар

Эҷоди ду массиви андоза дар руб

Эҷоди ду массиви андоза дар руб

Мақолаи навбатӣ як қисми силсила аст. Барои мақолаҳои бештар дар ин силсила, ба Cloning Game 2048 дар Руби нигаред. Барои рамзи пурра ва ниҳоӣ ба gist нигаред.

Акнун, ки мо медонем, ки алгоритм чӣ гуна кор хоҳад кард, вақти он расидааст, ки дар бораи маълумоте, ки ин алгоритм кор хоҳад кард, фикр кунем. Дар ин ҷо ду интихоби асосӣ мавҷуд аст: массиви ҳамворӣ ё намуди массаҳои ду андоза. Ҳар яки онҳо бартариҳои худро доранд, аммо пеш аз қабули қарор, мо бояд як чизро ба назар гирем.

Чашмҳои хушк

Усули маъмули кор бо муаммоҳои шабакавӣ, ки дар он шумо бояд чунин намунаҳоро ҷустуҷӯ кунед, ин як навиштани алгоритмест, ки дар муаммо аз чап ба рост кор мекунад ва баъд тамоми чаҳорчӯбаи тақрибан чор маротиба гардиш мекунад. Ин роҳ, алгоритм танҳо як маротиба навишта мешавад ва танҳо бояд аз чап ба рост кор кунад. Ин мушкилот ва андозаи қисми душвортарини лоиҳаро ба таври назаррас коҳиш медиҳад.

Азбаски мо дар болои муаммо аз чап ба рост кор хоҳем кард, доштани сатрҳоро дар сафҳо нишон додан дуруст аст. Ҳангоми сохтани массиви ду андоза дар Ruby (ё дақиқтараш, ки шумо мехоҳед ба он муроҷиат кунед ва маълумоти воқеӣ чӣ маъно дорад) шумо бояд интихоб кунед, ки оё шумо як қатори сатрҳоро мехоҳед (дар он ҳар як сатри шабака бо ифодаи он ифода карда мешавад) массив) ё сатри сутунҳо (дар ин ҷо ҳар як сутун як қатор аст). Азбаски мо бо сатрҳо кор карда истодаем, мо сатрҳоро интихоб мекунем.

Чӣ гуна ин массиви 2D гардиш карда мешавад, пас аз сохтани массиви аслӣ мо ба даст меоем.

Сохтани массиви ду андоза

Усули Array.new метавонад далел гирад, ки андозаи массивро, ки шумо мехоҳед муайян кунед. Барои намуна, Array.new (5) як қатор 5 объектҳои nil эҷод. Далели дуюм ба шумо арзиши пешфарз медиҳад, ҳамин тавр Array.new (5, 0) ба шумо маслиҳат медиҳад 0,0,0,0,0. Пас шумо чӣ гуна массиви ду андоза эҷод мекунед?

Усули нодуруст ва тарзи фикрронии одамон, ки одатан кӯшиш мекунанд, ин гуфтан аст Array.new (4, Array.new (4, 0)). Ба ибораи дигар, массиви 4 қатор, ҳар як сатр аз 4 нол иборатанд. Ва ин дар аввал ба назар мерасад. Аммо, рамзи зеринро иҷро кунед:

Ин оддӣ ба назар мерасад. Нормаи сифрҳои 4x4 созед, элементи чапи чапро ба 1 таъин кунед. Аммо онро чоп кунед ва мо ба даст меорем ...

Он тамоми сутуни аввалро ба 1 гузошт, чӣ медиҳад? Вақте ки мо массивҳоро сохтем, зангҳои ботинии аз ҳама ба Array.new аввал занг зада, як сатр гузошта мешаванд. Як истинод ба ин сатр 4 маротиба такрор карда мешавад, то сатри берунӣ-аксарро пур кунад. Пас аз ҳар сатр ба ҳамон масир ишора мекунад. Якеро иваз кунед, ҳамаашро иваз кунед.

Ба ҷои ин, мо бояд аз он истифода барем сеюм роҳи сохтани массиви дар Ruby. Ба ҷои он ки ба усули Array.new гузаред, мо як блок мегузорем. Ин блок ҳар вақте, ки усули Array.new ба арзиши нав ниёз дорад, иҷро карда мешавад. Пас, агар шумо мегӯед Array.new (5) {gets.chomp}, Руби қатъ карда, воридотро 5 маротиба дархост мекунад. Ҳамин тавр, танҳо коре, ки мо бояд кунем, танҳо сохтани массиви нав дар дохили ин блок аст. Ҳамин тавр мо ба охир мерасем Array.new (4) {Array.new (4,0)}. Акнун биёед ин парвандаи санҷиширо бори дигар санҷем.

Ва он ҳамон тавре ки шумо интизор будед, иҷро мекунад.

Ҳамин тавр, гарчанде ки Руби барои массаҳои ду андоза дастгирӣ намекунад, мо метавонем он чизеро ки лозим аст иҷро кунем. Танҳо дар хотир нигоҳ доред, ки массиви сатҳи болоӣ доред маълумотномаҳо ба sub-arrays, ва ҳар як ҷадвал бояд ба қатори гуногуни арзишҳо ишора кунад.

Ин чаҳорчӯба шуморо муаррифӣ мекунад. Дар ҳолати мо, ин масса ҳамчун сатрҳо гузошта шудааст. Индекси якум ин сатрест, ки мо индексатсия мекунем, аз боло ба поён. Барои индексатсия кардани сатри болоии муаммо, мо истифода мебарем а0, барои индексатсияи сатри навбатӣ, ки мо истифода мебарем а1. Барои индексатсия кардани сафҳаи мушаххас дар сафи дуюм, мо истифода мебарем а1н. Аммо, агар мо дар сутунҳо қарор дода бошем ... ин ҳамон чизе хоҳад буд. Руби ҳеҷ чизро дар бораи он, ки мо бо ин маълумот кор карда истодаем, намедонад ва азбаски он массивҳои андозагириро аз ҷиҳати техникӣ дастгирӣ намекунад, коре, ки мо дар ин ҷо мекунем, хак аст. Ба он танҳо ба воситаи анҷуман ворид шавед ва ҳама чиз якҷоя баргузор мешавад. Фаромӯш накунед, ки маълумотҳои зери кор бояд чӣ кор кунанд ва ҳама метавонанд зуд ба воқеият афтанд.


Video, Sitemap-Video, Sitemap-Videos