2012-07-02 15 views
5

संभव डुप्लिकेट:
How can I convert a list<> to a multi-dimensional array?सरणी सूची <T> परिवर्तित (बहुआयामी)

मैं इस उद्देश्य के लिए double[,] के रूप में एक सरणी है के बाद से मैं क्या होगा पता नहीं करना चाहते इस सरणी की लंबाई, मैं List बनाना चाहता हूं, बाद में List<T>.ToArray() का उपयोग करके इसे double[,] में परिवर्तित करें:

public double[,] FilterClampedData(double[,] data) 
{ 
    var finalData = new List<double[]>(); 

    //Do some stuff on parameter 

    return finalData.ToArray(); ///Does not compile :(
} 
+3

एक 'सूची ' केवल संभवतः में बदला जा सकता एक 'डबल []' सरणियों सभी एक ही लंबाई हैं। इसे आसानी से 'डबल [] []' में परिवर्तित किया जा सकता है (यही वह है 'ToArray' रिटर्न)। यदि यह आप के लिए स्पष्ट नहीं है, http://msdn.microsoft.com/en-us/library/2yd9wwz4 और http://msdn.microsoft.com/en-us/library/2s05feca –

+0

आपका विधि हस्ताक्षर से संकेत मिलता है की तुलना एक 2 डी आयामी सरणी वापसी के रूप में, जबकि आप एक एकल आयामी सरणी लौट रहे हैं। वास्तव में, आप सरणी की सरणी लौट रहे हैं। –

+0

क्या हुआ अगर आपके द्वारा दिया गया मान है 'डबल [] []' – Jodrell

उत्तर

5

ToArray के बाद से रिटर्न एक आयामी सरणी, वहाँ कोई आश्चर्य नहीं क्यों करता है संकलित नहीं यदि आप double[][] लौट रहे थे, तो यह संकलित होगा। तुम भी दो नेस्टेड छोरों के साथ मैन्युअल रूप से अपने 2-डी सरणी बना सकते हैं:

var R = finalData.Count; 
var C = finalData[0].Length; 
var res = new double[R, C]; 
for (int r = 0 ; r != R ; r++) 
    for (int c = 0 ; c != C ; c++) 
     res[r, c] = finalData[r][c]; 
return res; 

ऊपर कोड मानता है कि आपके finalData में कम से कम एक आइटम है, और finalData अंदर सभी सूचियों की लंबाई एक ही है कि।

+0

का मतलब है 'finalData.Count'? मुझे नहीं मिल रहा है। लम्बाई संपत्ति –

+0

@ सेन 87 बिल्कुल, आप सही हैं, यह 'गणना' है, न कि 'लंबाई'। – dasblinkenlight

+0

मुझे लगता है कि ओपी पहले से ही 'सी' को जान लेगा जब तक परिणाम नाराज न हो जाए। – Jodrell

1

finalData.ToArray()double[][] क्योंकि उत्पादन करेगा:

  • List<T>.ToArray() रिटर्न T[]
  • List<T[].ToArray() रिटर्न T[][]
+0

'बिल्कुल विपरीत statement' के साथ इस का खंडन यहाँ नहीं है के बाद से [पहली पंक्ति] - http://stackoverflow.com/a/11295805/763026 ? –

+0

@AngshumanAgarwal: "जब से toArray एक आयामी सरणी देता है" - हाँ, यह सही है और मेरे बयान के बराबर होती है। सूची .ToArray() टी [] देता है। सूची .ToArray() टी देता है [] []। – abatishchev

1
  1. सबसे बड़े आकार [सूची की लंबाई के साथ एक नया डबल सरणी इन्स्तांत, सबसे बड़ा सरणी सूची में लंबाई]
  2. चक्र (पहली सूची, वर्तमान सूची आइटम पर नेस्टेड पर) के लिए डबल के साथ सूची के माध्यम से वॉक और भरने नई सरणी
संबंधित मुद्दे