2012-06-04 14 views
5

मैं की तरह एक समारोह हस्ताक्षर है:परिवर्तित प्रकार पर दो [] [] फ्लोट करने के लिए

static public double[][] G2Sweep(int row1, int row2, double[][] mtx) 
{ 
    mtx = (float) mtx; 
} 

लेकिन मैं नाव मूल्यों में डबल [] [] मैट्रिक्स गुप्त की जरूरत है। यह कैसे किया जाता है क्योंकि कोड स्पष्ट रूप से इसे परिवर्तित नहीं कर सकता है?

+0

क्या आप संपूर्ण मैट्रिक्स को परिवर्तित करना चाहते हैं, आयाम को बनाए रखना चाहते हैं? ' – Codeman

+0

हाँ सभी मूल्यों को फ़्लोट करने के लिए, लेकिन मैं इसे लूप के लिए लूप करने के लिए नहीं करना चाहूंगा सभी – cdub

+1

कृपया अपने शीर्षक को "सी #" और इस तरह से उपसर्ग न करें। टैग के लिए यही है। –

उत्तर

4

नहीं, आप स्थान पर डबल से फ़्लोट नहीं कर सकते हैं, खासकर सरणी के लिए। आपको सही प्रकार के साथ प्रतिलिपि बनाना होगा।

+1

हाँ, हमें क्या करना है, जो कि बंदरगाह के लिए प्रसंस्करण शक्ति – cdub

1

हाँ सभी मूल्यों फ्लोट करने के लिए है, लेकिन मैं इसे माध्यम से कलम सभी

ठीक है, खेद है, लेकिन आप नहीं कर सकते पाश के लिए एक क्या करने वाले नहीं करना चाहेंगे। float (या int, या String, या MonkeyPoo, या जो भी हो) जैसे किसी प्रकार के सरणी को कास्ट करना कोई समझ नहीं आता है। यदि आपको किसी सरणी में प्रत्येक मान को देखने की आवश्यकता है तो आपको लूप की आवश्यकता है। उस तथ्य के आसपास कोई नहीं हो रहा है।

लैमदास और जो कुछ भी एक लूप पर उबाल नहीं है। आपको केवल बुलेट को काटने की आवश्यकता होगी और या तो ए) एक लूप में कनवर्ट करें (या .Cast<float> जैसे कुछ का उपयोग करें), या शुरू करने के लिए सही प्रकार का उपयोग करें।

+0

+1 पर सहेजने के लिए डबल से फ्लोट (मेरे कोड में सभी 554 उदाहरण) से सब कुछ बदलना है :) –

5
public static float[][] Convert(double[][] mtx) 
{ 
    var floatMtx = new float[mtx.Length][]; 
    for (int i = 0; i < mtx.Length; i++) 
    { 
     floatMtx[i] = new float[mtx[i].Length]; 
     for (int j = 0; j < mtx[i].Length; j++) 
      floatMtx[i][j] = (float)mtx[i][j]; 
    } 
    return floatMtx; 
} 

या:

public static float[][] Convert(double[][] mtx) 
{ 
    return mtx.Select(i => i.Select(j => (float)j).ToArray()).ToArray(); 
} 
+4

बुद्धिमानों के लिए शब्द; हालांकि दूसरा उदाहरण * दिखता है * सरल; आंतरिक रूप से यह वही लूपिंग करेगा। यद्यपि पढ़ने और बनाए रखना निश्चित रूप से आसान है! –

-1

आपको अपनी ओर से पाश लिख यदि आप LINQ का उपयोग बच सकते हैं।

float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray(); 

संपादित करें: तय करें।

+3

"निर्दिष्ट कास्ट मान्य नहीं है।" -1 अपने कोड की कोशिश नहीं करने के लिए। –

1

यह सच है कि आप cant स्थानांतरित कर सकते हैं और आपको मूल्यों के माध्यम से लूप करना होगा।

हालांकि, आजकल यह कहना उचित है कि स्मृति सस्ते है।

अपना डबल [] [] चर बनाने के बिंदु पर; क्यों न केवल एक फ्लोट [] [] को एक ही समय में बनाएं, इसलिए रूपांतरण एक स्थान पर किया जाता है।

आपके जीवन चक्र के बाकी हिस्सों में, आप केवल लेखन कार्य के लिए लेखन सरणी का उपयोग कर सकते हैं।

उसने कहा, क्या आप स्पष्ट कर सकते हैं कि आपको एक अलग फ्लोट और डबल सरणी की आवश्यकता क्यों है?

* उचित लेकिन जरूरी स्वीकार्य नहीं; अगर यह एक वेबपैप है जो अपने बॉक्स या आभासी छवि पर होस्ट किया गया है; तो यह ठीक है। यदि यह एक स्टैंडअलोन ऐप है जिसे नेटबुक पर या सिल्वरलाइट में कहीं भी काम करना पड़ सकता है, तो यह उचित या ठीक नहीं है।

+0

* "हालांकि, आजकल कहना उचित है कि स्मृति सस्ता है। *" - मेरी नेटबुक हाय कहती है। यदि यह जंजीर सरणी कभी अपेक्षाकृत बड़ी होगी तो दो बनाना एक भयानक समाधान है यदि ऐसा कुछ भी मौजूद है जो ऐसा करने की आवश्यकता को अस्वीकार कर देगा। –

+0

मैंने कहा * निष्पक्ष * नहीं * हर जगह पूरी तरह ठीक है *। मैं ओप को प्रोत्साहित करने के लिए और अधिक उम्मीद कर रहा था। कि निर्माण को देखने के लिए सृजन एक बेहतर जगह हो सकती है; यह तब तक मूक है जब तक हम नहीं जानते कि यह क्या है! और आपके नेटबुक से क्षमा चाहता है :) –

1

एक और तरीका है कि आप इस से क्या कर सकते हैं Array.ConvertAll विधि का उपयोग किया जाता है:

Array.ConvertAll<double, float>(doubles, d => (float)d); 

ही पाशन और स्पष्ट परिवर्तित करता है, लेकिन बेहतर लग रहा है।

+0

यह स्वीकार्य उत्तर होना चाहिए था। –

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

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