कोडजिम युनिव्हर्सिटी कोर्सचा एक भाग म्हणून मार्गदर्शकासह व्याख्यान स्निपेट. पूर्ण अभ्यासक्रमासाठी साइन अप करा.


"अभिवादन, अमिगो!"

"हॅलो, ऋषी!"

"तुम्हाला अ‍ॅरेबद्दल एक किंवा दोन गोष्टी आधीच माहित आहेत, आणि तुम्ही काही कार्ये सोडवण्यातही व्यवस्थापित आहात, मला आशा आहे. परंतु तुम्हाला सर्व काही माहित नाही. उदाहरणार्थ, अॅरेबद्दल आणखी एक मनोरंजक तथ्य येथे आहे. अॅरे केवळ एक-आयामी (रेषीय) नसतात. ते द्विमितीय देखील असू शकतात."

"अं... याचा अर्थ काय?"

"याचा अर्थ असा की अॅरेचे सेल केवळ स्तंभ (किंवा पंक्ती)च नव्हे तर आयताकृती सारणी देखील दर्शवू शकतात.

int[][]name = new int[width][height];

"जेथे अॅरे व्हेरिएबलचे नाव आहे, रुंदी ही टेबलची रुंदी आहे (सेलमध्ये) आणि उंची ही टेबलची उंची आहे. उदाहरण पहा:

int[][] data = new int[2][5];
data[1][1] = 5;
आम्ही द्विमितीय अॅरे तयार करतो: 2 स्तंभ आणि 5 पंक्ती.
आम्ही सेलमध्ये 5 लिहितो (1,1).

"मेमरीमध्ये हे असे दिसेल:

द्विमितीय अॅरे

"तसे, द्विमितीय अॅरेसाठी, तुम्ही जलद आरंभीकरण देखील वापरू शकता:

// Lengths of months of the year in each quarter
int[][] months = { {31, 28, 31}, {30, 31, 30}, {31, 31, 30}, {31, 30, 31} };

"हम्म... आता ते मनोरंजक आहे. जर आपण कल्पना केली की पहिल्या आतील कंसात एक घटक दर्शविला जातो, तर पुढचा दुसरा आहे... तर द्विमितीय अॅरे अॅरेच्या अॅरेसारखा असतो?"

"तुम्ही किती हुशार विद्यार्थी आहात! अगदी बरोबर. पहिला घटक एक-आयामी अॅरे आहे {31, 28, 31}, दुसरा आहे {30, 31, 30}, आणि असेच बरेच काही. परंतु आम्ही या धड्यात थोड्या वेळाने त्याकडे परत येऊ. तोपर्यंत, विचार करण्याचा प्रयत्न करा पंक्ती आणि स्तंभांसह एक सारणी म्हणून द्वि-आयामी अ‍ॅरे, प्रत्येक छेदनबिंदूवर सेल तयार करते.

"मला त्याचे एक मानसिक चित्र मिळाले आहे. तसे, हे द्विमितीय अॅरे कशासाठी वापरले जातात?"

"प्रोग्रामरला बर्‍याच वेळा द्वि-आयामी अॅरेची आवश्यकता असते. तुम्ही बारकाईने पाहिल्यास, जवळजवळ कोणताही बोर्ड गेम ऑफ-द-शेल्फ द्वि-आयामी अॅरे वापरून लागू केला जातो: बुद्धिबळ, चेकर्स, टिक-टॅक-टो, समुद्र युद्ध इ.:"

समुद्र युद्ध

"मला समजले! बुद्धिबळ किंवा सागरी लढाईचे मैदान द्विमितीय अॅरेवर पूर्णपणे बसते!"

"होय, परंतु तुम्हाला सेल निर्देशांक म्हणून संख्या वापरण्याची आवश्यकता आहे. 'प्यान e2-e4' नाही, तर 'प्यादा (5,2) -> (5,4)'. एक प्रोग्रामर म्हणून तुमच्यासाठी हे आणखी सोपे होईल. "

अॅरेमध्ये घटकांची मांडणी करणे: (x, y) किंवा (y, x)

"द्वि-आयामी अॅरे तयार केल्याने एक मनोरंजक संदिग्धता निर्माण होते. जेव्हा आपण वापरून अॅरे तयार करतो , तेव्हा आपल्याकडे 'दोन पंक्ती आणि 5 स्तंभnew int [2][5]; ' ची सारणी असते की 'दोन स्तंभ आणि 5 पंक्ती' असते?"

"दुसर्‍या शब्दात, हे पूर्णपणे स्पष्ट नाही की आपण प्रथम रुंदी आणि नंतर 'उंची... किंवा उलट, प्रथम उंची आणि नंतर रुंदी निर्दिष्ट करत आहोत?"

"हो, हीच कोंडी आहे. आणि निश्चित उत्तर नाही."

"काय करायचं?"

"प्रथम, आमचा द्विमितीय अॅरे मेमरीमध्ये कसा संग्रहित केला जातो हे समजून घेणे महत्त्वाचे आहे . स्वाभाविकच, संगणक मेमरीमध्ये प्रत्यक्षात कोणतीही सारणी नसते: मेमरीमधील प्रत्येक स्थानाचा अनुक्रमिक अंकीय पत्ता असतो: 0, 1, 2, ... आमच्यासाठी, हे 2 × 5 टेबल आहे, परंतु मेमरीमध्ये ते फक्त 10 सेल आहेत, आणखी काही नाही. पंक्ती आणि स्तंभांमध्ये विभागणी नाही."

"मला ते समजले. मग कोणता परिमाण प्रथम येतो - रुंदी किंवा उंची हे कसे ठरवायचे?"

"पहिल्या पर्यायाचा विचार करूया. आधी रुंदी, नंतर उंची . आणि नंतर 'y' (उभ्या आकारमान). आणि हे फक्त शालेय मानक नाही - हे गणितातील सामान्यतः स्वीकारलेले मानक आहे. जसे ते म्हणतात, तुम्ही गणिताशी वाद घालू शकत नाही.

"असं आहे का? बरं, आपण लढू शकत नसलो तर आधी रुंदी आणि मग उंची?"

" प्रथम उंची, नंतर रुंदी' च्या बाजूने एक मनोरंजक युक्तिवाद आहे . हा युक्तिवाद द्वि-आयामी अॅरेच्या जलद आरंभिकरणातून आला आहे. शेवटी, जर आम्हाला आमचा अ‍ॅरे सुरू करायचा असेल, तर आम्ही असा कोड लिहू:"

// Matrix of important data
int[][] matrix = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };

"मग ते आमच्यासाठी काय करते?"

"तुझ्या काही लक्षात आले का? आमच्याकडे हे असेल तर?

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {1, 2, 3, 4, 5}
};

"जर आपण कोड लाइनमध्ये आपला डेटा ओळीने लिहिला, तर आपल्याला 2 पंक्ती आणि 5 स्तंभांसह एक टेबल मिळेल."

"आता मी पाहतो. 2 ही उंची आहे आणि 5 ही रुंदी आहे... मग आपण कोणता पर्याय वापरावा?"

"कोणता अधिक सोयीस्कर आहे हे ठरवणे तुमच्यावर अवलंबून आहे. सर्वात महत्वाची गोष्ट म्हणजे एकाच प्रकल्पावर काम करणारे सर्व प्रोग्रामर समान दृष्टिकोनाला चिकटून राहतात."

"जर तुम्ही अशा प्रकल्पावर काम करत असाल ज्याच्या कोडमध्ये अनेक आरंभिक द्विमितीय अॅरे आहेत, तर बहुधा तेथे सर्व काही जलद डेटा इनिशिएलायझेशनवर आधारित असेल, म्हणजे तुमच्याकडे मानक 'उंची x रुंदी' असेल.

"जर तुम्ही स्वतःला अशा प्रकल्पात सापडला ज्यामध्ये बरेच गणित समाविष्ट आहे आणि निर्देशांकांसह (उदाहरणार्थ, गेम इंजिन), तर कोड बहुधा 'रुंदी x उंची' दृष्टिकोन स्वीकारेल.

द्विमितीय अॅरे कसे व्यवस्थित केले जातात

"आता, तुम्हाला धड्याच्या सुरुवातीला लक्षात आलेले द्विमितीय अॅरेचे विशेष वैशिष्ट्य आठवते का?"

"हो! हे असे होते की द्विमितीय अॅरे प्रत्यक्षात अॅरेचे अॅरे आहेत!"

"अगदी बरोबर." दुसऱ्या शब्दांत, जर सामान्य अॅरेच्या बाबतीत अॅरे व्हेरिएबल अॅरे घटक साठवणाऱ्या कंटेनरचा संदर्भ संग्रहित करत असेल, तर द्वि-आयामी अॅरेच्या बाबतीत परिस्थिती थोडीशी स्फोट होईल: द्विमितीय -अॅरे व्हेरिएबल कंटेनरचा संदर्भ संग्रहित करते जे एक-आयामी अॅरेचे संदर्भ संग्रहित करते. शंभर वेळा समजावून सांगण्यापेक्षा ते एकदा कृतीत पाहणे चांगले आहे:"

द्विमितीय अॅरे कसे व्यवस्थित केले जातात

"डावीकडे , आमच्याकडे द्वि-आयामी-अ‍ॅरे व्हेरिएबल आहे, जो द्विमितीय-अ‍ॅरे ऑब्जेक्टचा संदर्भ संग्रहित करतो. मध्यभागी एक द्विमितीय अॅरे ऑब्जेक्ट आहे ज्याच्या पेशी एक-आयामी अॅरे संग्रहित करतात, जे द्विमितीय अॅरेच्या पंक्ती. आणि उजवीकडे , तुम्ही चार एक-आयामी अॅरे पाहू शकता — आमच्या द्विमितीय अॅरेच्या पंक्ती. अशा प्रकारे द्विमितीय अॅरे प्रत्यक्षात काम करतात."

"विलक्षण! पण ते आपल्याला काय देते?"

"एक 'कंटेनरचा कंटेनर' 'पंक्तींच्या अॅरे' चा संदर्भ देत असल्याने, आम्ही पंक्ती अतिशय जलद आणि सहजतेने अदलाबदल करू शकतो. 'कंटेनरचा कंटेनर' मिळविण्यासाठी, तुम्हाला दोन ऐवजी फक्त एक निर्देशांक निर्दिष्ट करणे आवश्यक आहे. उदाहरण:

int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];

"खालील कोड पहा. आम्ही ते पंक्ती स्वॅप करण्यासाठी वापरू शकतो:"

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {5, 4, 3, 2, 1}
};

int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
द्विमितीय अॅरे





matrix[0]पहिल्या पंक्तीचा संदर्भ संग्रहित करते.
आम्ही संदर्भ अदलाबदल करतो.

परिणामी, matrixअॅरे असे दिसते:
{
  {5, 4, 3, 2, 1},
  {1, 2, 3, 4, 5}
};

"समजले. हे कोणत्याही दोन सामान्य वस्तूंची अदलाबदल करण्यासारखे काम करते."

"म्हणून असे होते. बरं, जर तुम्ही द्विमितीय अॅरेच्या सेलचा संदर्भ घेत असाल, परंतु तुम्ही अॅरेच्या नावापुढे फक्त एक निर्देशांक निर्दिष्ट केला असेल, तर तुम्ही कंटेनरच्या कंटेनरचा संदर्भ देत आहात ज्याचे सेल सामान्य एकाचे संदर्भ साठवतात- मितीय अॅरे."

"सगळं तार्किक आणि स्पष्ट दिसतंय. व्याख्यानाबद्दल धन्यवाद, ऋषी!"

"तुमचे स्वागत आहे. शहाणपणाने आचरणात आणा."