F# में array शून्य या अधिक वैल्यू का एक परिवर्तनीय संग्रह है, जिसकी लंबाई निश्चित होती है। इसका मतलब है कि ऐरे एक बार बन जाने के बाद उसका आकार नहीं बदल सकता, लेकिन उसकी वैल्यू बदल सकती हैं। ऐरे में रखी सभी वैल्यू का टाइप एक ही होना चाहिए। ऐरे को इस तरह बनाया जा सकता है:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
इंडेक्स की मदद से ऐरे में एलिमेंट असाइन किए जा सकते हैं या ऐरे से निकाले जा सकते हैं। F# के ऐरे में गिनती शून्य से शुरू होती है, यानी पहले एलिमेंट का इंडेक्स हमेशा शून्य होता है:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
ऐरे पर काम या तो Array मॉड्यूल में बने फंक्शन और ऑपरेटर की मदद से किया जाता है, या फिर ऐरे पैटर्न से खुद पैटर्न मैचिंग करके:
let describe array =
match array with
| [| |] -> "Empty"
| [| 1; 2; three |] -> sprintf "1, 2, %d" three
| _ -> "Other"
describe [| |] // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"
पैटर्न मैचिंग करते समय आप किसी वैल्यू को छोड़ भी सकते हैं; जब आपको किसी खास केस में किसी वैल्यू की परवाह न हो (यानी आप उस वैल्यू का इस्तेमाल नहीं करने वाले हैं), तो इसे जताने के लिए आप अंडरस्कोर ('_') लगा सकते हैं:
let describe array =
match array with
| [| |] -> "Empty array"
| [| x |] -> "Array with one item"
| [| _; y |] -> "Array with two items (first item ignored)"
| _ -> "Array with many items (all items ignored)"
describe [| |] // => "Empty array"
describe [| 1 |] // => "Array with one item"
describe [| 5; 7 |] // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |] // => "Array with many items (all items ignored)"
पैटर्न मैचिंग में अकेला '_' हमेशा सबसे अंत में आना चाहिए। जो वैल्यू बाकी किसी भी केस से मेल नहीं खाती, उसे यही केस संभालता है।
आप एक उत्साही पक्षी-निरीक्षक हैं और यह हिसाब रखते हैं कि पिछले सात दिनों में आपके बगीचे में कितने पक्षी आए।
आपके सामने छह कार्य हैं, और सब आपके बगीचे में आए पक्षियों की संख्याओं से जुड़े हैं।
तुलना के लिए आप पिछले सप्ताह की गिनतियों की एक प्रति हमेशा पास रखते हैं, जो ये थीं: 0, 2, 5, 3, 7, 8 और 4। lastWeek बाइंडिंग बनाइए जिसमें पिछले सप्ताह की गिनतियाँ हों:
lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]
yesterday फंक्शन बनाइए जो लौटाए कि कल आपके बगीचे में कितने पक्षी आए थे। पक्षियों की गिनतियाँ दिन के क्रम में लगी हैं: पहला एलिमेंट सबसे पुराने दिन की गिनती है और अंतिम एलिमेंट आज की गिनती।
yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4
total फंक्शन बनाइए जो लौटाए कि आपके बगीचे में कुल कितने पक्षी आए हैं:
total [| 3; 5; 0; 7; 4; 1 |]
// => 20
dayWithoutBirds फंक्शन बनाइए जो true लौटाता है अगर कोई ऐसा दिन था जब बगीचे में शून्य पक्षी आए; वरना false लौटाइए:
dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true
incrementTodaysCount फंक्शन बनाइए जो आज की गिनती बढ़ाए और अपडेट की गई गिनतियाँ लौटाए:
let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]
पिछले एक साल में आपने पाया है कि कुछ सप्ताहों में एक जैसे असामान्य पैटर्न होते हैं:
unusualWeek फंक्शन बनाइए जो true लौटाता है अगर इस सप्ताह का पक्षी-गिनती पैटर्न इनमें से किसी एक असामान्य पैटर्न से मेल खाता है:
unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true
unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true
(ध्यान दीजिए कि दिनों की समता का इंडेक्स 1 से शुरू होता है, 0 से नहीं, यानी ऐरे का पहला एलिमेंट विषम दिन के साथ जुड़ा है)
Exercism पर साइन अप कीजिए और F# को 18 कॉन्सेप्ट148 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।