1. இரு பரிமாண வரிசைகள்

வரிசைகள் பற்றிய மற்றொரு சுவாரஸ்யமான உண்மை. அணிவரிசைகள் ஒரு பரிமாண (நேரியல்) மட்டுமல்ல. அவை இரு பரிமாணமாகவும் இருக்கலாம்.

இதன் பொருள் என்ன, நீங்கள் கேட்கிறீர்களா?

இதன் பொருள், வரிசையின் செல்கள் ஒரு நெடுவரிசை (அல்லது வரிசை) மட்டுமல்ல, ஒரு செவ்வக அட்டவணையையும் குறிக்கும்.

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} };

ஒரு புரோகிராமராக உங்களுக்கு இரு பரிமாண வரிசை தேவைப்படும் பல இடங்கள் உள்ளன. இரு பரிமாண வரிசைகள் கிட்டத்தட்ட ஒவ்வொரு பலகை விளையாட்டின் அடித்தளமாகும், எ.கா. செஸ், செக்கர்ஸ், டிக்-டாக்-டோ மற்றும் கடல் போர்:

இரு பரிமாண அணிவரிசைகள் 2

சதுரங்கம் அல்லது கடல் போருக்கு இரு பரிமாண வரிசைகள் சரியானவை. செல் ஆயத்தொலைவுகளின் எண்கள் மட்டுமே நமக்குத் தேவை. 'pawn e2-e4' அல்ல, ஆனால் 'pawn (5,2) -> (5,4)'. ஒரு புரோகிராமராக உங்களுக்கு இது இன்னும் எளிதாக இருக்கும்.


2. வரிசைகளில் உறுப்புகளை வரிசைப்படுத்துதல்: (x, y) அல்லது (y, x)

மூலம், இங்கே ஒரு சுவாரஸ்யமான குழப்பம் உள்ளது:

ஐப் பயன்படுத்தி ஒரு வரிசையை உருவாக்கும்போது , ​​​​எங்களிடம் 'இரண்டு வரிசைகள் மற்றும் 5 நெடுவரிசைகள்new int[2][5]; ' உள்ளதா அல்லது அது 'இரண்டு நெடுவரிசைகள் மற்றும் 5 வரிசைகள் ' உள்ளதா?" வேறுவிதமாகக் கூறினால், நாம் முதலில் அகலத்தையும் பின்னர் உயரத்தையும் குறிப்பிடுகிறோமா... அல்லது இதற்கு நேர்மாறாக, முதலில் உயரம் மற்றும் அகலம்?சரி, நாம் அடிக்கடி சொல்வது போல், இங்கே எல்லாம் அவ்வளவு எளிதல்ல.

வரிசை நினைவகத்தில் எவ்வாறு சேமிக்கப்படுகிறது என்ற கேள்வியுடன் ஆரம்பிக்கலாம் .

நிச்சயமாக, கணினி நினைவகத்தில் உண்மையில் ஒரு அணி இல்லை: நினைவகத்தில் உள்ள ஒவ்வொரு இடத்திற்கும் ஒரு வரிசை எண் முகவரி உள்ளது: 0, 1, 2, ... எங்கள் விஷயத்தில், நாங்கள் 2 × 5 மேட்ரிக்ஸைப் பற்றி பேசுகிறோம், ஆனால் நினைவகத்தில் இது வெறும் 10 தொடர்ச்சியான செல்கள், அதற்கு மேல் எதுவும் இல்லை. வரிசைகள் மற்றும் நெடுவரிசைகள் எங்கே என்று எதுவும் குறிப்பிடவில்லை.

"அகலம் x உயரம்" க்கு ஆதரவான வாதம்.

இந்த அணுகுமுறைக்கு ஆதரவான வாதம் என்னவென்றால், எல்லோரும் பள்ளியில் கணிதத்தைக் கற்றுக்கொள்கிறார்கள், அங்கு அவர்கள் ஒருங்கிணைப்பு ஜோடிகளை 'x' (அதாவது, கிடைமட்ட அச்சு) மற்றும் பின்னர் 'y' (செங்குத்து பரிமாணம்) என்று எழுதுகிறார்கள். இது ஒரு பள்ளி தரநிலை மட்டுமல்ல - இது கணிதத்தில் பொதுவாக ஏற்றுக்கொள்ளப்பட்ட தரமாகும். அவர்கள் சொல்வது போல், நீங்கள் கணிதத்துடன் வாதிட முடியாது. அப்படியா? முதலில் அகலம், பிறகு உயரம்?

"உயரம் x அகலம்" க்கு ஆதரவான வாதம்.

இந்த நிலைக்கு ஒரு சுவாரஸ்யமான வாதமும் உள்ளது: இரு பரிமாண வரிசைகளின் வேகமான துவக்கம். உண்மையில், நாம் நமது வரிசையை துவக்க விரும்பினால், நாம் இது போன்ற குறியீட்டை எழுதலாம்:

// 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 நெடுவரிசைகள் கொண்ட மேட்ரிக்ஸ் கிடைக்கும்.

கீழ் வரி

நாம் என்ன சொல்ல முடியும்? எது உங்களுக்கு மிகவும் வசதியானது என்பதை நீங்கள் தீர்மானிக்க வேண்டும். மிக முக்கியமான விஷயம் என்னவென்றால், ஒரே திட்டத்தில் பணிபுரியும் அனைத்து புரோகிராமர்களும் ஒரே அணுகுமுறையில் ஒட்டிக்கொள்கிறார்கள்.

நீங்கள் ஒரு திட்டத்தில் பணிபுரிந்தால், அதன் குறியீட்டில் நிறைய துவக்கப்பட்ட இரு பரிமாண வரிசைகள் உள்ளன, பெரும்பாலும் எல்லாமே வேகமான தரவு துவக்கத்தின் அடிப்படையில் இருக்கும், அதாவது உங்களிடம் நிலையான 'உயரம் x அகலம்' இருக்கும்.

நிறைய கணிதம் மற்றும் ஒருங்கிணைப்புகளுடன் (உதாரணமாக, கேம் என்ஜின்கள்) பணிபுரியும் திட்டத்தில் உங்களைக் கண்டுபிடிக்கும் அதிர்ஷ்டம் உங்களுக்கு இருந்தால், குறியீடு பெரும்பாலும் 'அகலம் x உயரம்' அணுகுமுறையைப் பின்பற்றும்.


3. இரு பரிமாண அணிவரிசைகள் எவ்வாறு வரிசைப்படுத்தப்படுகின்றன

இரு பரிமாண வரிசைகள் உண்மையில் எவ்வாறு ஒழுங்கமைக்கப்பட்டுள்ளன என்பதை இப்போது நீங்கள் அறிந்து கொள்வீர்கள். தயாரா?

இரு பரிமாண வரிசைகள் உண்மையில் வரிசைகளின் வரிசைகள்!

வேறு வார்த்தைகளில் கூறுவதானால், ஒரு சாதாரண வரிசையின் விஷயத்தில் ஒரு வரிசை மாறி வரிசை உறுப்புகளை சேமிக்கும் கொள்கலனைப் பற்றிய குறிப்பைச் சேமித்தால், இரு பரிமாண வரிசைகளின் விஷயத்தில் நிலைமை சிறிது வெடிக்கும்: இரு பரிமாண-வரிசை மாறி சேமிக்கிறது a ஒரு பரிமாண வரிசைகளுக்கான குறிப்புகளை சேமிக்கும் கொள்கலனுக்கான குறிப்பு. அதை நூறு முறை விளக்க முயற்சிப்பதை விட ஒரு முறை செயலில் இருப்பதைப் பார்ப்பது நல்லது:

இரு பரிமாண அணிவரிசைகள் எவ்வாறு வரிசைப்படுத்தப்படுகின்றன

இடதுபுறத்தில் , எங்களிடம் இரு பரிமாண-வரிசை மாறி உள்ளது, இது இரு பரிமாண-வரிசை பொருளின் குறிப்பைச் சேமிக்கிறது . இல்நடுவில் எங்களிடம் இரு பரிமாண வரிசை பொருள் உள்ளது, அதன் செல்கள் ஒரு பரிமாண வரிசைகளை சேமிக்கின்றன, அவை இரு பரிமாண வரிசையின் வரிசைகள். வலதுபுறத்தில் , நீங்கள் நான்கு ஒரு பரிமாண வரிசைகளைக் காணலாம் - எங்கள் இரு பரிமாண வரிசையின் வரிசைகள்.

இரு பரிமாண வரிசைகள் உண்மையில் இப்படித்தான் செயல்படுகின்றன. இந்த அணுகுமுறை ஜாவா புரோகிராமருக்கு பல நன்மைகளை வழங்குகிறது:

முதலில் , ஒரு 'கன்டெய்னர் ஆஃப் கன்டெய்னர்' 'வரிசைகளின் வரிசைகள்' பற்றிய குறிப்புகளை சேமிப்பதால், நாம் மிக விரைவாகவும் எளிதாகவும் வரிசைகளை மாற்றலாம். ஒரு 'கன்டெய்னர் ஆஃப் கன்டெய்னர்' பெற, நீங்கள் இரண்டிற்குப் பதிலாக ஒரு குறியீட்டைக் குறிப்பிட வேண்டும். உதாரணமாக:

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}
};

நீங்கள் இரு பரிமாண வரிசையின் கலத்தைக் குறிப்பிடுகிறீர்கள், ஆனால் வரிசையின் பெயருக்குப் பிறகு ஒரு குறியீட்டை மட்டுமே குறிப்பிடுகிறீர்கள் என்றால், சாதாரண ஒரு பரிமாண வரிசைகளுக்கான குறிப்புகளை செல்கள் சேமிக்கும் கொள்கலன்களின் கொள்கலனைக் குறிப்பிடுகிறீர்கள்.