Swift Language
स्विफ्ट अग्रिम कार्य
खोज…
परिचय
Array और Dictionary जैसे विभिन्न संग्रह प्रकारों को संचालित करने के लिए map
, flatMap
, filter
और reduce
जैसे अग्रिम कार्यों का उपयोग किया जाता है। आम तौर पर अग्रिम कार्यों के लिए छोटे कोड की आवश्यकता होती है और एक संक्षिप्त तरीके से जटिल तर्क बनाने के लिए एक साथ जंजीर हो सकती है।
अग्रिम कार्यों के साथ परिचय
चलो बेहतर तरीके से अग्रिम फ़ंक्शन को समझने के लिए एक परिदृश्य लेते हैं,
struct User {
var name: String
var age: Int
var country: String?
}
//User's information
let user1 = User(name: "John", age: 24, country: "USA")
let user2 = User(name: "Chan", age: 20, country: nil)
let user3 = User(name: "Morgan", age: 30, country: nil)
let user4 = User(name: "Rachel", age: 20, country: "UK")
let user5 = User(name: "Katie", age: 23, country: "USA")
let user6 = User(name: "David", age: 35, country: "USA")
let user7 = User(name: "Bob",age: 22, country: nil)
//User's array list
let arrUser = [user1, user2, user3, user4, user5, user6, user7]
मानचित्र कार्य:
एक संग्रह पर पाश का उपयोग करें और संग्रह में प्रत्येक तत्व के लिए एक ही ऑपरेशन लागू करें। मैप फ़ंक्शन एक सरणी देता है जिसमें मैपिंग लागू करने या फ़ंक्शन को प्रत्येक आइटम में बदलने का परिणाम होता है।
//Fetch all the user's name from array
let arrUserName = arrUser.map({ $0.name }) // ["John", "Chan", "Morgan", "Rachel", "Katie", "David", "Bob"]
फ़्लैट-मैप फ़ंक्शन:
सबसे सरल उपयोग के रूप में नाम संग्रह के एक संग्रह समतल करने के लिए सुझाव है।
// Fetch all user country name & ignore nil value.
let arrCountry = arrUser.flatMap({ $0.country }) // ["USA", "UK", "USA", "USA"]
फ़िल्टर समारोह:
एक संग्रह पर लूप के लिए फ़िल्टर का उपयोग करें और एक एरे को वापस करें जिसमें केवल वे तत्व शामिल हैं जो एक सम्मिलित स्थिति से मेल खाते हैं।
// Filtering USA user from the array user list.
let arrUSAUsers = arrUser.filter({ $0.country == "USA" }) // [user1, user5, user6]
// User chaining methods to fetch user's name who live in USA
let arrUserList = arrUser.filter({ $0.country == "USA" }).map({ $0.name }) // ["John", "Katie", "David"]
कम करना:
एक नया मान बनाने के लिए सभी आइटमों को एक संग्रह में संयोजित करने के लिए कम करें।
स्विफ्ट 2.3: -
//Fetch user's total age.
let arrUserAge = arrUser.map({ $0.age }).reduce(0, combine: { $0 + $1 }) //174
//Prepare all user name string with seperated by comma
let strUserName = arrUserName.reduce("", combine: { $0 == "" ? $1 : $0 + ", " + $1 }) // John, Chan, Morgan, Rachel, Katie, David, Bob
स्विफ्ट 3: -
//Fetch user's total age.
let arrUserAge = arrUser.map({ $0.age }).reduce(0, { $0 + $1 }) //174
//Prepare all user name string with seperated by comma
let strUserName = arrUserName.reduce("", { $0 == "" ? $1 : $0 + ", " + $1 }) // John, Chan, Morgan, Rachel, Katie, David, Bob
सपाट बहुआयामी सरणी
एकल आयाम में बहुआयामी सरणी को समतल करने के लिए, फ्लैटपाइप अग्रिम फ़ंक्शन का उपयोग किया जाता है। अन्य उपयोग का मामला सरणी और मानचित्रण मूल्यों से शून्य मूल्य की उपेक्षा करना है। आइए उदाहरण के साथ देखें: -
मान लीजिए हमारे पास शहरों का एक बहुआयामी सरणी है और हम बढ़ते क्रम में शहर की नाम सूची को क्रमबद्ध करना चाहते हैं। उस स्थिति में हम फ्लैटपाइप फ़ंक्शन का उपयोग कर सकते हैं जैसे: -
let arrStateName = [["Alaska", "Iowa", "Missouri", "New Mexico"], ["New York", "Texas", "Washington", "Maryland"], ["New Jersey", "Virginia", "Florida", "Colorado"]]
बहुआयामी सरणी से एकल आयामी सूची तैयार करना,
let arrFlatStateList = arrStateName.flatMap({ $0 }) // ["Alaska", "Iowa", "Missouri", "New Mexico", "New York", "Texas", "Washington", "Maryland", "New Jersey", "Virginia", "Florida", "Colorado"]
सरणी मानों को सॉर्ट करने के लिए, हम चेनिंग ऑपरेशन या सॉर्ट फ्लैटन सरणी का उपयोग कर सकते हैं। नीचे उदाहरण में चेनिंग ऑपरेशन दिखाया गया है,
// Swift 2.3 syntax
let arrSortedStateList = arrStateName.flatMap({ $0 }).sort(<) // ["Alaska", "Colorado", "Florida", "Iowa", "Maryland", "Missouri", "New Jersey", "New Mexico", "New York", "Texas", "Virginia", "Washington"]
// Swift 3 syntax
let arrSortedStateList = arrStateName.flatMap({ $0 }).sorted(by: <) // ["Alaska", "Colorado", "Florida", "Iowa", "Maryland", "Missouri", "New Jersey", "New Mexico", "New York", "Texas", "Virginia", "Washington"]