2011-12-30 20 views
15

मैं जावास्क्रिप्ट के बारे में एक पुस्तक पढ़ रहा था और इस लाइन को देखा;एक वास्तविक बहु आयामी सरणी क्या है?

जावास्क्रिप्ट सच बहुआयामी सरणी का समर्थन नहीं करता है, लेकिन आप उन्हें सरणी के सरणी के साथ अनुमानित कर सकते हैं।

क्या अंतर है?

उत्तर

17

एक वास्तविक बहु-आयामी सरणी को कई सूचकांक के साथ अनुक्रमित किया जाना चाहिए। सरणी की एक सरणी को एक इंडेक्स के साथ अनुक्रमित किया जा सकता है, जो एक और सरणी लौटाएगा। एक सच्चे बहु-आयामी सरणी अपने सभी डेटा को संगत रूप से संग्रहीत करती है। सरणी की एक सरणी अपने सभी घटक अरणों को मनमाने ढंग से बिखरी हुई है। यह सच्चे सरणी के लिए कैश प्रभावों के कारण पुनरावृत्ति प्रदर्शन में सुधार कर सकता है।

+0

+1 विस्तृत और स्पष्ट। – alex

+0

यदि कोई सरणी मौजूद है जो आपको "पंक्ति" को पुनर्प्राप्त करने के लिए एक एकल अनुक्रमणिका का उपयोग करने देती है, लेकिन इसके सभी डेटा को संगत रूप से संग्रहीत किया गया है, तो क्या यह आवश्यक रूप से वास्तव में बहु-आयामी नहीं होगा? दूसरे शब्दों में, क्या इन दोनों बाधाओं को वास्तव में पूरा करना है, या केवल उत्तरार्द्ध? – kojiro

+3

उदाहरण के लिए अच्छी तरह से नोट करें कि जावास्क्रिप्ट में कोई प्रवर्तन नहीं है कि दो-आयामी सरणी की पंक्तियों में कॉलम की संख्या समान है। – Pointy

2

जावास्क्रिप्ट में ऐसा कुछ नहीं है ...

var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */ 

... enforced लंबाई के साथ। एक मैट्रिक्स की तरह।

हालांकि, आप Array बना सकते हैं, जिनमें से इसके सदस्य सभी Array एस निश्चित अवधि के हैं। यदि उप Array एस में से एक अलग लंबाई थी, तो यह जागArray होगा।

3

(एक दृश्य व्याख्या यह है कि @recursive का एक उत्कृष्ट answer पूरक)

कुछ भाषाओं में (सी #) दोनों कर रहे हैं। अंतर ऐसे सरणी के "आकार" में है।

int[3, 4] // true two-dimensional array 

// it will "look" like this, rectangular shape 
[[0, 0, 0, 0] 
[0, 0, 0, 0] 
[0, 0, 0, 0]] 

लेकिन जब आप सरणी की सरणी को परिभाषित करते हैं, तो यह आसानी से (विशेष रूप से जावास्क्रिप्ट में) इस तरह दिख सकता है। इसे jagged array कहा जाता है।

[[0, 0] 
[0, 0, 0, 0, 0, 0] 
[0, 0, 0]] 
+0

एमएसडीएन लेख स्पष्ट था। धन्यवाद। – Sinan

1

हालांकि JavaScript विनिर्देश (3.0) बहुआयामी सरणियों का उल्लेख नहीं है, वे संभव वास्तव में कर रहे हैं। बहु-आयामी सरणी को सरणी के सरणी द्वारा दर्शाया जा सकता है। See

उदाहरण के लिए।

var items = [[1,2],[3,4],[5,6]]; 
alert(items[0][0]); // Would alert 1 

जावास्क्रिप्ट में एक आयामी सरणी।

var a = [0, 1, 2, 3]; 
a[[2]] === a[2]; // this is true 

2 == [2] //true 
// Even complex 
2 == [[[2]]] //true 

// And even more 
var a = { "xyz" : 1 }; 
a[[[["xyz"]]]] === a["xyz"]; //true 
2

लेखक ग्रहण करने के लिए है कि एक "सही" बहुआयामी सरणी से एक है लगता है जहां सभी तत्वों:

  • सरणियों हैं;

  • मूल्य द्वारा संग्रहीत किया जाता है, संदर्भ के अनुसार नहीं; और

  • समान लंबाई है।

जावास्क्रिप्ट सरणी में अन्य सरणी हो सकती हैं, लेकिन मूल्य से नहीं, केवल संदर्भ द्वारा।यही है, प्रत्येक पंक्ति के तत्व स्मृति में संगत हो सकते हैं, लेकिन पंक्तियां स्वयं नहीं हो सकती हैं। इसके अलावा, स्थिर रूप से इंगित करने का कोई तरीका नहीं है कि सभी आंतरिक सरणीओं में समान लंबाई होनी चाहिए, क्योंकि जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है।

लेकिन सरणी की एक सरणी ठीक है जो आपको जावास्क्रिप्ट में एक बहुआयामी सरणी का प्रतिनिधित्व करने के लिए उपयोग करना चाहिए, और आंतरिक प्रतिनिधित्व का विवरण शायद आपके लिए प्रासंगिक नहीं है जब आप केवल भाषा सीख रहे हों।

संबंधित मुद्दे