2009-07-08 15 views
12

मैं की तरह कुछ करना चाहता हूँ के लिए 1 आयामी सरणी आवंटित?C# 2 आयामी सरणी वाक्य रचना

या मैं यह करने की जरूरत है:

for (int i = 0; i < rowOfObjects.Length; i++) 
{ 
    tableOfObjects[0,i] = rowOfObjects[i]; 
} 

और 2 आयामी सरणी पंक्ति एक पाश का उपयोग कर भरने?

धन्यवाद

उत्तर

7

नहीं, यदि आप एक दो आयामी सरणी का उपयोग कर रहे यह संभव नहीं है। आपको प्रत्येक आइटम की प्रतिलिपि बनाना है।

आप एक दांतेदार सरणी का उपयोग करते हैं, यह सिर्फ ठीक काम करता है:

// create array of arrays 
object[][] tableOfObject = new object[10][]; 
// create arrays to put in the array of arrays 
for (int i = 0; i < 10; i++) tableOfObject[i] = new object[10]; 

// get row as array 
object[] rowOfObject = GetRow(); 
// put array in array of arrays 
tableOfObjects[0] = rowOfObjects; 

आप पंक्तियों के रूप में सभी डेटा मिल रहे हैं, निश्चित रूप से आप पाश कि सरणियों के सरणी में सरणियों डालता है की जरूरत नहीं है , जैसा कि आप उन्हें वैसे भी बदल देंगे।

+0

धन्यवाद तो ऑब्जेक्ट [] [] tableOfObject = new object [10] [10]; और ऑब्जेक्ट [,] tableOfObjects = नई वस्तु [10,10]; बहुत धन्यवाद। – m3ntat

+3

एक ऑब्जेक्ट [,] एक दो आयामी सरणी है, यह हमेशा आयताकार होता है (सभी पंक्तियां समान लंबाई होती हैं)। एक वस्तु [] [] एक जंजीर सरणी है; ऑब्जेक्ट की एक सरणी [] सरणी। चूंकि प्रत्येक पंक्ति स्वयं में एक सरणी है, इसलिए उन्हें एक ही लंबाई नहीं होना चाहिए। – Guffa

+0

आह जो समझ में आता है। धन्यवाद गुफा। – m3ntat

-1

तो, कुछ की तरह:

public static object[] GetRow() 
    { 
     object[,] test = new object[10,10]; 
     int a = 0; 
     object[] row = new object[10]; 
     for(a = 0; a <= 10; a++) 
     { 
      row[a] = test[0, a]; 
     } 
     return row; 
    } 
+0

यह विपरीत है; एक आयामी सरणी में एक दो आयामी सरणी से आइटम प्राप्त करना। (इसके अलावा, लंबाई 10 के साथ एक सरणी सूचकांक 0-9 है, 0-10 नहीं)। – Guffa

+0

अरे, मेरे बुरे, मैंने वास्तव में कोड नहीं चलाया, मैं बस इसे स्मृति से कर रहा था। –

1

अगर मैं गीगाबाइट आकार सरणियों है, मैं इसे C++/CLI संकेत के साथ खेल रहे हैं और बस के बजाय gazillion धीमी गति से सीमा-जाँच की सरणी अनुक्रमण संचालन होने के memcpy कर करना होगा।

8

यदि आपकी सरणी value types की एक सरणी है, तो यह संभव है।

int[,] twoD = new int[2, 2] { 
    {0,1}, 
    {2,3} 
}; 
int[] oneD = new int[2] 
    { 4, 5 }; 
int destRow = 1; 
Buffer.BlockCopy(
    oneD, // src 
    0, // srcOffset 
    twoD, // dst 
    destRow * twoD.GetLength(1) * sizeof(int), // dstOffset 
    oneD.Length * sizeof(int)); // count 
// twoD now equals 
// {0,1}, 
// {4,5} 

ऑब्जेक्ट्स की एक श्रृंखला के साथ यह संभव नहीं है।

नोट: चूंकि .net3.5 यह केवल प्राइमेटिव्स की सरणी के साथ काम करेगा।

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