2010-02-04 22 views
28

अगर मैं एक्स के बारे में सोच, वाई समन्वय विमान एक्स, वाई एक आदेशित युग्म के लिए आम अंकन है, लेकिन अगर मैं एक दो पैसा भी सरणी का उपयोग मैं myArray [पंक्ति] है [col] और पंक्ति y है और col है एक्स। क्या वह पीछे है या क्या मैं बस इसके बारे में सोच रहा हूं? मैं सोच रहा था यह myArray [x] [y] की तरह लग रही है लेकिन यह गलत है अगर मैं वास्तविक पंक्तियों और स्तंभों चाहते हैं (एक gameboard में की तरह।) यह myArray [y] होना नहीं चाहेंगे [x] सही मायने में एक पंक्ति स्तंभ बोर्ड नकल करने के लिए ?क्या एक्स, वाई और पंक्ति, दो आयामी सरणी के कर्नल गुण पीछे की ओर हैं?

+0

मैंने खुद को अपने माता-पिता से एक ही प्रश्न पूछने के लिए पाया। यह जानना अच्छा है कि कोई मानक नहीं है। –

उत्तर

24

आप यह सही है, और यह थोड़ा पीछे की ओर महसूस करता है। पंक्ति संख्या एक वाई समन्वय है, और कॉलम संख्या एक एक्स समन्वय है, और फिर भी हम आमतौर पर पंक्ति, कॉल लिखते हैं लेकिन हम आमतौर पर एक्स, वाई लिखते हैं।

चाहे आप अपनी सरणी लिखना चाहते हैं [y] [x] निर्भर करता है या [x] [y] इस बात पर निर्भर करता है कि आप वास्तव में स्मृति में लेआउट के बारे में कितना ख्याल रखते हैं (और यदि आप करते हैं, तो आप किस भाषा का उपयोग करते हैं) । और क्या आप उन कार्यों/विधियों को लिखना चाहते हैं जो अलगाव में पंक्तियों या स्तंभों पर काम कर सकते हैं।

यदि आप सी/सी ++ कोड लिख रहे हैं, तो Row Major Order में सरणी संग्रहीत की जाती हैं जिसका अर्थ है कि डेटा की एक पंक्ति को 1 आयामी सरणी के रूप में माना जा सकता है। लेकिन डेटा का एक कॉलम नहीं कर सकता है। अगर मुझे सही याद है, तो वीबी कॉलम प्रमुख ऑर्डर का उपयोग करता है, इसलिए भाषाएं अलग-अलग होती हैं। मुझे आश्चर्य होगा कि सी # भी प्रमुख आदेश नहीं है, लेकिन मुझे नहीं पता।

0

वास्तव में, यह आप पर निर्भर है। आपके प्रश्न में सोचने का कोई अधिकार नहीं है। उदाहरण के लिए मैं आमतौर पर सेल की एक पंक्ति के रूप में एक आयाम सरणी के बारे में सोचता हूं। तो, मेरे दिमाग में यह सरणी [कॉल] [पंक्ति] है। लेकिन यह वास्तव में आप पर निर्भर है ...

+1

यदि आप कैश के परिणामों के बारे में सोच रहे हैं, तो * इसे देखने का सही तरीका है ... –

+0

@mmeyers: वास्तव में, प्रभाव यह नहीं है कि आप गेम-बोर्ड के किनारे स्टोर करते हैं। इस तरह छवियों को स्टोर करना आम बात है। – Joel

+1

मुझे लगता है कि प्रश्न किसी दिए गए संदर्भ के बिना है ... बेशक विभिन्न संदर्भों में, अलग-अलग तर्क हैं। – anthares

0

मुझे यकीन है इस पर अलग-अलग राय के एक बहुत देखते हैं। निचली पंक्ति यह है कि जब तक आप लगातार होते हैं, यह वास्तव में कोई फर्क नहीं पड़ता। यदि आपके पास अन्य पुस्तकालय या समान हैं जो समान डेटा का उपयोग करने जा रहे हैं, तो यह आसान हो सकता है कि वे जो भी आसान एकीकरण के लिए करें।

यदि यह आपके स्वयं के कोड में सख्ती से है, जो कुछ भी आप के साथ सहज महसूस करते हैं। मेरी व्यक्तिगत प्राथमिकता myArray [y] [x] का उपयोग करना होगा। यदि वे बड़े हैं, तो उन वस्तुओं को रखने के प्रदर्शन लाभ हो सकते हैं जिन्हें आप एक ही समय में एक साथ पहुंचने जा रहे हैं। लेकिन मैं इसके बारे में चिंता नहीं करता जब तक कि बहुत देर तक नहीं।

0

वास्तव में, यदि आप एक्स अक्ष पर तत्वों के रूप में पंक्ति के बारे में सोचते हैं और फिर 2 डी सरणी वाई अक्ष पर पंक्ति तत्वों का एक गुच्छा है, तो पंक्ति के साथ काम करने के लिए y का उपयोग करना सामान्य है, जैसा कि आप पहले से ही पता एक्स और फिर एक्स का उपयोग (पंक्तियाँ खड़ी है, एक विशेष y मूल्य पर हर एक खड़ी दिखती हैं)

कई पंक्ति तत्वों पर संचालित करने के लिए (एक ही के लिए है कि विशेष पंक्ति एक्स हमेशा रहा है, यह y कि अपनी सूचकांक के साथ बदल रहा है)
1

यह कोई फर्क नहीं पड़ता कि कैसे आप सरणी में अपने डेटा स्टोर ([x] [y] या [y] [x])। इससे कोई फर्क नहीं पड़ता कि आप हमेशा एक समान तरीके से सरणी पर लूप करते हैं। एक जावा दो आयामी सरणी अनिवार्य रूप से एक दूसरे आयाम को संग्रहीत करने वाला एक आयामी सरणी है (उदाहरण के लिए [y] [x] के मामले में आपके पास [y] की एक लंबी सरणी है जिसमें प्रत्येक वाई के लिए संबंधित [x] सरणी होती है वाई की रेखा)।

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

तो किसी सरणी [y] [x] स्थिति में

for (int ys = 0; ys < Array[y].length; ys++) 
    for (int xs = 0; xs < Array[y][x].length; xs++) 
    { 
     do your stuff here 
    } 

और निश्चित रूप से लूप के बाहर दोनों Array.lengths पूर्व आवंटित उन मूल्यों को हर चक्र प्राप्त करने के लिए हो रही रोकने के लिए: हमेशा बाहरी पाश में पहली चर और भीतरी पाश में दूसरा है।

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