2015-02-16 8 views
8

सूचियों, सरणियों, और एफ # में tuples के बीच क्या अंतर है? क्या आवश्यक होने पर उनके बीच कनवर्ट करना आसान है? वे सभी भावनाओं में समान दिखते हैं, तो वास्तव में मुझे यह जानने की ज़रूरत है कि मुझे समझने में मदद मिलती है कि एक बनाम दूसरे का उपयोग कब किया जाए?एफ # में सूचियों, सरणी, और tuples के बीच क्या अंतर है?

+0

(नोट: मुझे संदेह है कि यह एक मूल प्रश्न है, लेकिन स्टैक ओवरफ्लो के समान प्रश्न सुझावक मेरे लिए डुप्ली नहीं ढूंढ रहे थे ...) –

उत्तर

10

एक tuple अज्ञात का एक समूह है, मूल्यों का आदेश दिया।

let someTuple = (1, "foo", 42.3) 

यह एक टपल किसी पूर्णांक, स्ट्रिंग, और नाव मूल्य युक्त बनाना होगा: एक टपल में प्रत्येक मूल्य एक ही प्रकार, जिसका मतलब है कि आप एक टपल की तरह परिभाषित कर सकते हैं होने की जरूरत नहीं है।

list उसी प्रकार के के मानदंड संग्रह का एक आदेश दिया गया है जो अपरिवर्तनीय है। यह शायद सबसे आम संग्रह कार्यात्मक प्रोग्रामिंग में इस्तेमाल किया प्रकार है के रूप में यह पूरी तरह से अडिग है और पूर्व में बनाए गए सूची के शीर्ष पर बनाया गया सूची बनाने के लिए कार्यक्षमता का एक बहुत, (वे वास्तव में नए हैं, जो आप संग्रह है कि "बढ़ने" बनाने के लिए अनुमति देता है संग्रह, हालांकि, सूचियां अपरिवर्तनीय हैं)।

एक array एक निश्चित आकार, परिवर्तनशील संग्रह है। वे बनाने के लिए बहुत ही कुशल हैं, लेकिन हमेशा एक ही प्रकार का होना चाहिए।

यह उन दोनों के बीच परिवर्तित करने के लिए जरूरत पड़ने पर आसान है?

सूचियों और सरणी के बीच कनवर्ट करना बहुत आसान है। आप List.ofArray, List.toArray, Array.ofList, और Array.toList प्रकारों के बीच कनवर्ट करने के लिए उपयोग कर सकते हैं। के रूप में कई प्रकार के tuples उनके भीतर संगृहीत करने की अनुमति

सरणी या सूची टपल से परिवर्तित, आम, और नहीं हमेशा नहीं संभव है।

वे सभी भावनाओं में समान दिखते हैं, तो वास्तव में मुझे यह जानने की ज़रूरत है कि मुझे समझने की ज़रूरत है कि एक बनाम किसी दूसरे का उपयोग कब करें?

सूचियां और सरणी संग्रह दोनों के लिए उपयोग की जाती हैं। आम तौर पर, आप सूचियों को प्राथमिकता देना चाहेंगे यदि आप ऐसी सूचियां बनाने जा रहे हैं जो "बढ़ते हैं", एक तत्व की एक नई सूची बनाने के रूप में + मूल सूची एक सरणी के साथ एक ही चीज़ करने से कहीं अधिक प्रभावशाली है।

Arrays अक्सर उच्च प्रदर्शन परिदृश्यों के लिए उपयोग किया जाता है (उनके पास बेहतर स्मृति क्षेत्र है, अधिक स्थान कुशल हैं, आदि), लेकिन म्यूटेबल और निश्चित आकार हैं, इसलिए जब आप निर्माण के साथ काम करने की कोशिश कर रहे होते हैं तो वे अक्सर आदर्श नहीं होते हैं संग्रह।

टुपल्स आमतौर पर पूरी तरह से अलग-अलग परिदृश्यों के लिए उपयोग किए जाते हैं। टुपल्स के लिए सबसे आम उपयोग केस एक मूल्य के रूप में कई वस्तुओं को पास करना है। जब ढांचा तरीकों out मापदण्डों की तरह, उदाहरण के लिए का उपयोग कर यह अपने आप होता है, तो आप की तरह उपयोग के मामलों को देखेंगे: इस मामले में

let (success, value) = int.TryParse(someString) 

, टपल स्वचालित रूप से बनाया जाता है और फिर पैटर्न का मिलान नहीं हुआ एक में मानों को निकालने के लिए कोड की एक पंक्ति। एक "संग्रह" के रूप में एक tuple के बारे में सोचने के बजाय, यह कई मूल्यों, अक्सर विभिन्न प्रकार के एक साथ रखने के लिए एक तरीका है।

1

संग्रह प्रकार का उपयोग कर के बारे में: जब

सूचियाँ: आप एक गतिशील संग्रह है कि आकार में बदल जाता है की जरूरत है। सूची एक दिशात्मक लिंक वाली सूची है इसलिए ध्यान रखें कि सूची के प्रत्येक सदस्य को अतिरिक्त सूची तत्व के लिए पॉइंटर को संग्रहीत अतिरिक्त मेमोरी के 4 या 8 बाइट की आवश्यकता होती है।

पर एरेज़: आपको बड़ी मात्रा में आदिम मूल्यों जैसे कि इनट्स, फ्लोट्स या बाइट्स स्टोर करने की आवश्यकता होती है। Arrays मानों के लिए आरक्षित स्मृति के एक स्थिर ब्लॉक का प्रतिनिधित्व करते हैं, यह तब प्रभावी होता है जब आपको किसी छवि के बाइट्स को स्टोर करना होता है।

अतिरिक्त उपयोगी संग्रह:

सेट जब: आप स्टोर करने के लिए, अच्छी तरह से एक सेट की जरूरत है। सेट अद्वितीय मूल्यों का संग्रह है। अंतर, संघ और चौराहे की गणना करने के लिए सेट में उपयोगी कार्य हैं। उदाहरण के लिए आप सभी लोगों (ए) और उन लोगों के समूह का सेट कर सकते हैं जिन्होंने कैंडी खरीदी (बी) ताकि आप अब ए - बी = सी की गणना कर सकें, अब आपने सी सेट किया है जो कैंडी नहीं खरीदता है।

मानचित्र: आपको एक मान से दूसरे मूल्य पर प्रक्षेपण की आवश्यकता है। अब पिछले उदाहरण में आपने सी (गणना करने वाले लोगों को कैंडी नहीं खरीदी) की गणना की है, तो संभवतः आपने इन लोगों का वर्णन करने के लिए कुछ आईडी का उपयोग किया था। अब आप इस आईडी से मानचित्र का उपयोग कर व्यक्ति रिकॉर्ड में प्रोजेक्ट कर सकते हैं :)।

मुझे आशा है कि यह उपयोगी था।

+0

@Reed मैं आपके उत्तरों के आधार पर एक ग्रिड बनाता हूं। यह छेद से भरा है। क्या आप छेद भर सकते हैं? संपादन योग्य स्प्रेडशीट: [लिंक] (https://docs.google.com/spreadsheets/d/1YQDNeRMj68HszxnkdgOK03CuMIlz7XHQzI0aLcMfe3U/edit?usp=sharing) –

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