2010-04-06 23 views
5

क्या LINQ का उपयोग करने के लिए क्या प्रत्येक कॉलम अधिकतम दो आयामी सरणी के लिए प्राप्त करने के लिए है?दो आयामी Arrays के लिए कॉलम के अधिकतम प्राप्त करने के लिए LINQ का उपयोग

मान लें मैं निम्नलिखित है:, arrays[1,:] .... arrays[4,:]

var arrays = new double[5,100](); 

मैं arrays[0,:] की अधिकतम करना चाहते हैं। LINQ का उपयोग करने के लिए इसका उपयोग कैसे करें?

मैं उपयोग इस तरह के विधि

public double GetMax(double[,] arr, int rowIndex) 
{ 
    var colCount = arr.GetLength(1); 
    double max = 0.0; 
    for(int i=0; i<colCount; i++) 
    { 
     max=Math.Max(Math.Abs(arr[rowIndex, i]), max); 
    } 
    return max; 
} 

हो सकता था लेकिन मैं काम करने के लिए एक और अधिक संक्षिप्त तरीके पसंद करेंगे।

उत्तर

5

मुझे लगता है कि आप हमेशा अनुक्रमित लिए उपयोग की एक कॉम्पैक्ट फार्म के रूप में Enumerable.Range इस्तेमाल कर सकते हैं:

public static double GetMax(double[,] arr, int rowIndex) 
{ 
    return (from col in Enumerable.Range(0, arr.GetLength(1)) 
      select arr[rowIndex, col]).Max(); 
} 

और तुम सभी पंक्तियों के लिए इसे पाने के लिए चाहते हैं:

public static double[] GetMaxForAllRows(double[,] arr, int rowIndex) 
{ 
    return (from row in Enumerable.Range(0, arr.GetLength(0)) 
      let cols = Enumerable.Range(0, arr.GetLength(1)) 
      select cols.Max(col => arr[row, col])).ToArray(); 
} 
3

मुझे नहीं लगता कि एक बहुआयामी सरणी से एक पंक्ति प्राप्त करने के लिए एक अंतर्निहित तरीका है। आप एक विस्तार विधि हालांकि लिख सकते हैं:

public static IEnumerable<T> Row<T>(this T[,] array, int rowIndex) 
{ 
    var colCount = array.GetLength(1); 
    for(int i=0; i<colCount; i++) 
    { 
     yield return arr[rowIndex, i]; 
    } 
} 

और फिर बस "सामान्य" LINQ का उपयोग करें:

var max = array.Row(i).Max(); 
0

LINQ किसी भी तरीके कि बहुआयामी सरणियों को कवर नहीं है।

हालांकि, यदि आप इसे किसी सूची में परिवर्तित कर सकते हैं, या शायद अपने स्वयं के एक्सटेंशन रोल कर सकते हैं।

0

आप नेस्ट उपयोग कर सकते हैं "बयान से"। इस प्रकार तालिका के भीतर संबंधित कॉल/पंक्ति स्थिति का प्रतिनिधित्व करने वाले रेंज चर के साथ संपूर्ण सरणी के माध्यम से पुनरावृत्त करें। प्रत्येक संख्या के लिए, आप यह जांचना चाहते हैं कि यह अपनी पंक्ति के भीतर या उसके कॉलम के भीतर एक नया अधिकतम है या नहीं।

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