दिलचस्प पोस्ट
जावास्क्रिप्ट में खिड़की, स्क्रीन और दस्तावेज़ के बीच अंतर क्या है? कैसे jquery के साथ दो divs स्पर्श पता लगाने के लिए? स्काला में कई पैरामीटर सूचियों और प्रति सूची में कई मापदंडों के बीच क्या अंतर है? एक आईफोन में घन को बनाने और घूमने के लिए ओपन जीएल ईएस को कहाँ शुरू करना है? या तो एएनएसआई सी या आईएसओ सी क्या है -5% 10 क्या होना चाहिए? क्या ऐसा फ़ाइल डाउनलोड करने के लिए एक लिंक जोड़ना संभव है जिसे केवल फेसबुक पर साझा करने से डाउनलोड किया जा सकता है? Pgadmin के साथ एक heroku डेटाबेस से कनेक्ट करें कैसे पता लगाने के लिए कि विशिष्ट आईडी के साथ div jQuery में मौजूद है? कैसे वेब सर्वर के साथ आईफोन कोर डेटा को सिंक्रनाइज़ करें, और फिर अन्य डिवाइसों पर धक्का दें? जावा ईई फ्रंटएंड विधि में सर्विस लेयर अपवाद को संभालना आर से बाहर एक साफ आर सत्र से बाहर निकलें और पुनरारंभ करें? जार भरी हुई नहीं सर्वलेट स्पेक 2.3 देखें, खंड 9 .7.2। अपमानजनक श्रेणी: javax / servlet / servlet.class सेग्यू प्रोग्राम प्रोग्राम करें और गंतव्य दृश्य में पैरामीटर पास करें आपको C ++ 11 में स्थिरता क्षमता का उपयोग कब करना चाहिए? CLR में 'जैसा' कीवर्ड का उपयोग करके बनाम बनाम

1 डी सरणी पर एक 2 डी सरणी को मैप करें

मैं 1 डी सरणी के साथ 2 डी सरणी का प्रतिनिधित्व करना चाहता हूं। एक फ़ंक्शंस दो indicies (एक्स, वाई) और स्टोर करने के लिए मान देगी। ये दो indicies एक 1 डी सरणी के एक तत्व का प्रतिनिधित्व करेंगे, और उसके अनुसार तदनुसार सेट करेंगे। मुझे पता है 1 डी सरणी को सरणी-चौड़ाई × सरणी का आकार होना चाहिए, लेकिन मुझे नहीं पता कि प्रत्येक तत्व कैसे सेट करना है।

उदाहरण के लिए, मैं (4, 3,3) से (2,4,3) कैसे भेद कर सकता हूं? मैंने एक्स * वाई के रूप में सरणी को सेट करने की कोशिश की, लेकिन 2 * 4 और 4 * 2 के परिणामस्वरूप सरणी में एक ही जगह होगी और मुझे उन्हें अलग-अलग होना चाहिए।

वेब के समाधान से एकत्रित समाधान "1 डी सरणी पर एक 2 डी सरणी को मैप करें"

आपको यह तय करने की आवश्यकता है कि सरणी तत्व पंक्ति आदेश या स्तंभ क्रम में संग्रहीत किए जाएंगे और उसके बाद इसके बारे में सुसंगत रहें। http://en.wikipedia.org/wiki/Row-major_order

सी भाषा बहुआयामी arrays के लिए पंक्ति आदेश का उपयोग करती है

यह एक एकल आयामी सरणी के साथ अनुकरण करने के लिए, आप चौड़ाई से पंक्ति अनुक्रमणिका गुणा करें, और इस प्रकार स्तंभ अनुक्रमणिका को जोड़ दें:

int array[width * height]; int SetElement(int row, int col, int value) { array[width * row + col] = value; } 

उदाहरण: हम SIZE_X और SIZE_Y आकार के 2 डी सरणी का प्रतिनिधित्व करना चाहते हैं। इसका अर्थ है कि हमारे पास MAXX आकार की अधिकतम लगातार पंक्तियां होंगी। इसलिए सेट फ़ंक्शन है

 void set_array( int x, int y, int val ) { array[ x * SIZE_Y + y ] = val; } 

प्राप्त होगा:

 int get_array( int x, int y ) { return array[ x * SIZE_Y + y ]; } 

1 डी सरणी अनुक्रमणिका में 2 डी सरणी सूचकांक के पुनर्गणना के लिए विशिष्ट सूत्र है

 index = indexX * arrayWidth + indexY; 

वैकल्पिक रूप से आप उपयोग कर सकते हैं

 index = indexY * arrayHeight + indexX; 

(यह मानते हुए कि arrayWidth को एक्स अक्ष के साथ मापा जाता है, और वाई अक्ष के साथ arrayHeight )

बेशक, एक कई अलग-अलग फ़ार्मुलों के साथ आ सकता है जो वैकल्पिक अद्वितीय मैपिंग प्रदान करते हैं, लेकिन आम तौर पर इसमें कोई आवश्यकता नहीं होती है

सी / सी ++ भाषाओं में अंतर्निहित बहुआयामी arrays को स्मृति में संग्रहीत किया जाता है ताकि अंतिम सूचकांक सबसे तेजी से बदल जाए, जिसका अर्थ है कि एक सरणी के लिए घोषित

 int xy[10][10]; 

तत्व xy[5][3] तुरंत स्मृति में xy[5][4] द्वारा पीछा किया जाता है आप उस सम्मेलन का अनुसरण करना चाह सकते हैं, ऊपर दिए गए दो सूत्रों में से एक को चुनकर, जिस पर आप इंडेक्स (एक्स या वाई) के बारे में सोचते हैं, दो का "अंतिम" माना जाता है।

जैसा कि दूसरे ने सी क्रम में सी नक्शे कहा है

  #include <stdio.h> int main(int argc, char **argv) { int i, j, k; int arr[5][3]; int *arr2 = (int*)arr; for (k=0; k<15; k++) { arr2[k] = k; printf("arr[%d] = %2d\n", k, arr2[k]); } for (i=0; i<5; i++) { for (j=0; j< 3; j++) { printf("arr2[%d][%d] = %2d\n", i, j ,arr[i][j]); } } } 

आउटपुट:

 arr[0] = 0 arr[1] = 1 arr[2] = 2 arr[3] = 3 arr[4] = 4 arr[5] = 5 arr[6] = 6 arr[7] = 7 arr[8] = 8 arr[9] = 9 arr[10] = 10 arr[11] = 11 arr[12] = 12 arr[13] = 13 arr[14] = 14 arr2[0][0] = 0 arr2[0][1] = 1 arr2[0][2] = 2 arr2[1][0] = 3 arr2[1][1] = 4 arr2[1][2] = 5 arr2[2][0] = 6 arr2[2][1] = 7 arr2[2][2] = 8 arr2[3][0] = 9 arr2[3][1] = 10 arr2[3][2] = 11 arr2[4][0] = 12 arr2[4][1] = 13 arr2[4][2] = 14 

पंक्ति प्रमुख उदाहरण का उपयोग कर:

 A(i,j) = a[i + j*ld]; // where ld is the leading dimension // (commonly same as array dimension in i) // matrix like notation using preprocessor hack, allows to hide indexing #define A(i,j) A[(i) + (j)*ld] double *A = ...; size_t ld = ...; A(i,j) = ...; ... = A(j,i); 

डेटा को ऐसे तरीके से संगृहीत करना महत्वपूर्ण है जिसे इसे इस्तेमाल की जाने वाली भाषाओं में पुनः प्राप्त किया जा सकता है। पंक्ति-प्रमुख क्रम में सी-भाषा के स्टोर (पहली पंक्ति पहले आती है, फिर दूसरी पंक्ति के सभी …) हर सूचकांक के साथ 0 से उसके पास आयाम-1 है। तो एक्स [2] [3] एक्स [0] [0], एक्स [0] [1], एक्स [0] [2], एक्स [1] [0], एक्स [1] [x] [x] 1], एक्स [1] [2] तो सी भाषा में, एक्स [i] [जे] को उसी स्थान को 1-आयामी सरणी प्रविष्टि x1dim [i * 3 + j] के रूप में संग्रहीत किया जाता है। यदि इस तरह से डेटा संग्रहीत किया जाता है, तो सी भाषा में पुनः प्राप्त करना आसान है।

फोरट्रान और MATLAB अलग हैं वे कॉलम-प्रमुख क्रम में स्टोर करते हैं (पहले कॉलम पहले आता है, फिर दूसरी पंक्ति, …) और हर सूचकांक 1 से लेकर उसके आयाम तक चलता है। तो सूचकांक क्रम सी के पीछे है और सभी सूचकांक 1 बड़ा है। यदि आप सी भाषा क्रम में डेटा संग्रहीत करते हैं, तो फोरट्रान X_FORTRAN (j + 1, i + 1) का उपयोग करते हुए X_C_language [i] [j] पा सकते हैं। उदाहरण के लिए, X_C_language [1] [2] X_FORTRAN (3, 2) के बराबर है। 1-आयामी arrays में, उस डेटा का मान X1dim_C_language [2 * Cdim2 + 3] पर है, जो कि X1dim_FORTRAN (2 * Fdim1 + 3 + 1) के समान स्थान है। याद रखें कि Cdim2 = Fdim1 क्योंकि सूचकांक का क्रम उलट है।

MATLAB फ़ॉरट्रान के समान है एडीए सी के समान है, सिवाय इंडेक्स सामान्यतः 1 से शुरू होता है। किसी भी भाषा में उन सी या फोरट्रान ऑर्डर में से एक में इंडेक्स होंगे और सूचकांक 0 या 1 से शुरू हो जाएंगे और तदनुसार संग्रहीत डेटा प्राप्त करने के लिए समायोजित किया जा सकता है।

क्षमा करें यदि यह स्पष्टीकरण भ्रामक है, लेकिन मुझे लगता है कि प्रोग्रामर को जानने के लिए यह सही और महत्वपूर्ण है।

आप एक साधारण सूचक के साथ जगह में 2d सरणी का उपयोग करने में सक्षम होना चाहिए। सरणी [x] [y] पी [0x * चौड़ाई + 0y] [0x * चौड़ाई + 1]] [0x * चौड़ाई + एन-1]] [1x * चौड़ाई + 0y] आदि के रूप में सूचक में व्यवस्था की जाएगी। ।