यह प्रश्न किसी ऐसे व्यक्ति से आ रहा है जो आर से एफ # में संक्रमण करने पर काम कर रहा है। मैं पूरी तरह से स्वीकार करता हूं कि यहां मेरा दृष्टिकोण गलत हो सकता है इसलिए मैं इसे करने का एफ # तरीका ढूंढ रहा हूं। मेरे पास एक ऐसी स्थिति है जहां मैं एक्सएमएल फाइलों के एक सेट के माध्यम से पुनरावृत्ति करना चाहता हूं, उन्हें पार्स कर सकता हूं, और यह पहचानने के लिए कई मूल्यों को निकालने के लिए कि किसके लिए आगे की प्रक्रिया की आवश्यकता है। मेरा प्राकृतिक झुकाव इस मामले में एक्सएमएल डेटा, exampleData
की सरणी पर मानचित्र करना है, RawDataProvider
प्रकार प्रदाता का उपयोग करके प्रत्येक को पार्स करें, और आखिरकार पार्स किए गए एक्सएमएल, एक्सएमएल से स्टेटस वैल्यू, और आइटम आईडी सहित प्रत्येक फाइल के लिए मैप ऑब्जेक्ट बनाएं मूल्य।एफ # संग्रह प्रकार
यह पता चला है कि एफ # में मानचित्र प्रकार आर में सूची की तरह नहीं है आर में अनिवार्य रूप से हैशैप्स हैं जो मिश्रित प्रकारों का समर्थन कर सकते हैं। ऐसा प्रतीत होता है कि एफ # में मानचित्र प्रकार मिश्रित प्रकारों को संग्रहित करने का समर्थन नहीं करता है। मैंने इसे अपने आर काम में अविश्वसनीय रूप से उपयोगी पाया है और इसके लिए यह देख रहा हूं कि सही F # संग्रह इसके लिए क्या है।
या, क्या मैं इस सब गलत के बारे में सोच रहा हूं? आर में डेटा संसाधित करने के लिए यह एक बहुत ही स्वाभाविक तरीका है इसलिए मैं उम्मीद करता हूं कि एफ # में भी ऐसा करने का एक तरीका होगा। धारणा यह है कि मैं आगे के विश्लेषण करने जा रहा हूं और इन संग्रहों में डेटा के अतिरिक्त तत्व जोड़ रहा हूं।
अद्यतन: यह इस तरह के एक सरल उपयोग के मामले कि वहाँ विश्लेषण के प्रत्येक चरण के लिए एक रिकॉर्ड प्रकार को परिभाषित करने के बिना एफ # में ऐसा करने का एक मुहावरेदार तरीका होना चाहिए की तरह लगता है। मैंने यह उदाहरण आगे बढ़ाने के लिए अपना उदाहरण अपडेट किया है कि मैं क्या करने की कोशिश कर रहा हूं। मैं मानचित्र वस्तुओं है कि मैं का विश्लेषण किया है की एक सरणी वापस जाने के लिए चाहते हैं:
type RawDataProvider = XmlProvider<"""<product Status="Good" ItemId="123" />""">
let exampleData = [| """<product Status="Good" ItemId="123" />"""; """<product Status="Bad" ItemId="456" />"""; """<product Status="Good" ItemId="789" />"""|]
let dataResult =
exampleData
|> Array.map(fun fileData -> RawDataProvider.Parse(fileData))
|> Array.map(fun xml -> Map.empty.Add("xml", xml).Add("Status", xml.Status).Add("ItemId", xml.ItemId))
|> Array.map(fun elem -> elem.["calc1Value"] = calc1 elem["itemId"])
|> Array.map(fun elem -> elem.["calc2"] = calc2 elem.["ItemId"] elem.["calc1Value"])
आपने जो नहीं पूछा, लेकिन मुझे लगता है कि 'File.ReadAllLines (फ़ाइल) |> Array.reduce (+) 'को' File.ReadAllText (फ़ाइल) ' – CoderDennis
@CoderDennis के साथ प्रतिस्थापित किया जा सकता है –
जानकारी के लिए धन्यवाद ढीले टाइप किए गए हैश के बजाय एक रिकॉर्ड प्रकार का उपयोग करें। –