2009-06-22 26 views
5

हैलो मुझे सी # Arrays के साथ एक समस्या है। मैं एक सरणी की जरूरत है वहाँ में कुछ डेटा स्टोर करने के लिए ... मेरे कोड है किएक निश्चित आकार के बिना एक डबल सरणी परिभाषित करें?

double[] ATmittelMin; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 

लेकिन संकलक का कहना है: वर परिभाषित नहीं मैं कैसे एक निश्चित आकार के बिना एक डबल सरणी परिभाषित कर सकते हैं? बहुत बहुत धन्यवाद!

उत्तर

15

सरणी हमेशा आकार में तय कर रहे हैं, और इसलिए तरह से परिभाषित करने की है

double[] items1 = new double[10]; 

// This means array is double[3] and cannot be changed without redefining it. 
double[] items2 = {1.23, 4.56, 7.89}; 

List<T> वर्ग पृष्ठभूमि में एक सरणी का उपयोग करता है और यह पुनर्परिभाषित करता है जब यह स्थान से बाहर चलाता है:

List<double> items = new List<double>(); 
items.Add(1.23); 
items.Add(4.56); 
items.Add(7.89); 

// This will give you a double[3] array with the items of the list. 
double[] itemsArray = items.ToArray(); 

आप एक List<T> के माध्यम से पुनरावृति कर सकते हैं बस के रूप में तुम एक सरणी:

foreach (double item in items) 
{ 
    Console.WriteLine(item); 
} 

// Note that the property is 'Count' rather than 'Length' 
for (int i = 0; i < items.Count; i++) 
{ 
    Console.WriteLine(items[i]); 
} 
+0

मैं सूची – subprime

+0

@subprime के माध्यम से कैसे पुन: सक्रिय कर सकता हूं: foreach (वस्तुओं में डबल आइटम) {...}, या आइटम [n] सूचकांक –

+0

धन्यवाद! यह जवाब है :) – subprime

0

जो मैंने देखा है उससे आपने zaehlMittel चर घोषित नहीं किया है। मुझे लगता है कि संकलक इस बारे में शिकायत करता है।

इसके अलावा, भले ही आप निश्चित रूप से उस चर के मूल्य को निर्धारित कर सकें, पल आप अपने सरणी को बनाना चाहते हैं, इसका आकार ज्ञात होना चाहिए। इस तरह से सरणी काम करते हैं।

यदि आप आसानी से ऐसा नहीं कर सकते हैं, तो मैं सूची या सेट की तरह कुछ प्रकार के गतिशील डेटास्ट्रक्चर का उपयोग करने का सुझाव देता हूं। फिर, एक बार सभी तत्व जोड़े जाने के बाद, आप निश्चित रूप से उस से एक सरणी बनाने के लिए स्वतंत्र हैं, क्योंकि उस समय तक आप तत्वों की संख्या जानते हैं (भले ही toArray() जैसी सुविधा विधियां हैं जो इसकी भी देखभाल करेंगे)।

0

आप इसे उपयोग करने से पहले सरणी instanciate करने के लिए है:

double[] ATmittelMin = new double[10]; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 
+0

केवल काम करता है अगर zaehlMittel <10 – ChrisF

0

स्पष्ट समाधान जो मन में स्प्रिंग्स एक सूची का उपयोग करने के लिए है:

List<double> ATmittelMin = new List<double>(); 
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax); 

लेकिन तुम कन्वर्ट करने के लिए नहीं करना चाहते हैं किसी सूची से सरणी में आप बाद में सरणी विकसित कर सकते हैं:

double[] ATmittelMin = new double[10]; 
// Some code 
int index = some_value; 
if (index >= TmittelMin.Length) 
{ 
    Array.Resize(ATmittelMin, index+5); // So we're not constantly resizing the array 
} 

यह आदर्श नहीं है क्योंकि आप बहुत कुछ कर रहे हैं List दृश्यों के पीछे काम कर रहा है - शायद आप जितना अधिक कुशलता से कर सकते हैं।

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