স্যুইফ্ট 5 অনুরূপ অবজেক্টগুলির অ্যারে থেকে সম্পত্তি মানগুলির অ্যারে পেতে বিভিন্ন উপায় সরবরাহ করে। আপনার প্রয়োজন অনুসারে, আপনার সমস্যা সমাধানের জন্য আপনি নীচের ছয়টি খেলার মাঠের কোড উদাহরণ বেছে নিতে পারেন।
1. map
পদ্ধতি ব্যবহার করে
সুইফ্টের সাথে, Sequence
প্রোটোকলের সাথে খাপ খায় এমন একটি map(_:)
পদ্ধতি রয়েছে। নিম্নলিখিত নমুনা কোডটি কীভাবে এটি ব্যবহার করবেন তা দেখায়:
class Employee {
let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
let idArray = employeeArray.map({ (employee: Employee) -> Int in
employee.id
})
// let idArray = employeeArray.map { $0.id } // also works
print(idArray) // prints [1, 2, 4]
২. for
লুপ ব্যবহার করা
class Employee {
let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
var idArray = [Int]()
for employee in employeeArray {
idArray.append(employee.id)
}
print(idArray) // prints [1, 2, 4]
৩. while
লুপ ব্যবহার করা
দ্রষ্টব্য যে সুইফ্টের সাথে, পর্দার আড়ালে, একটি for
লুপ while
একটি sequence
'পুনরুক্তি' (কেবল আরও বিশদের জন্য ইটেটরপ্রোটোকল দেখুন) এর উপর একটি লুপ ।
class Employee {
let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
var idArray = [Int]()
var iterator = employeeArray.makeIterator()
while let employee = iterator.next() {
idArray.append(employee.id)
}
print(idArray) // prints [1, 2, 4]
4. ব্যবহার করা একটি struct
যে কে কনর্ফাম করে IteratorProtocol
এবং Sequence
প্রোটোকল
class Employee {
let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
struct EmployeeSequence: Sequence, IteratorProtocol {
let employeeArray: [Employee]
private var index = 0
init(employeeArray: [Employee]) {
self.employeeArray = employeeArray
}
mutating func next() -> Int? {
guard index < employeeArray.count else { return nil }
defer { index += 1 }
return employeeArray[index].id
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
let employeeSequence = EmployeeSequence(employeeArray: employeeArray)
let idArray = Array(employeeSequence)
print(idArray) // prints [1, 2, 4]
5. Collection
প্রোটোকল এক্সটেনশন ব্যবহার করে এবংAnyIterator
class Employee {
let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
extension Collection where Iterator.Element: Employee {
func getIDs() -> Array<Int> {
var index = startIndex
let iterator: AnyIterator<Int> = AnyIterator {
defer { index = self.index(index, offsetBy: 1) }
return index != self.endIndex ? self[index].id : nil
}
return Array(iterator)
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
let idArray = employeeArray.getIDs()
print(idArray) // prints [1, 2, 4]
K. কেভিসি এবং NSArray
এর value(forKeyPath:)
পদ্ধতি ব্যবহার করা
দ্রষ্টব্য যে এই উদাহরণ class Employee
থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া দরকার NSObject
।
import Foundation
class Employee: NSObject {
@objc let id: Int, firstName: String, lastName: String
init(id: Int, firstName: String, lastName: String) {
self.id = id
self.firstName = firstName
self.lastName = lastName
}
}
let employeeArray = [
Employee(id: 1, firstName: "Jon", lastName: "Skeet"),
Employee(id: 2, firstName: "Darin", lastName: "Dimitrov"),
Employee(id: 4, firstName: "Hans", lastName: "Passant")
]
let employeeNSArray = employeeArray as NSArray
if let idArray = employeeNSArray.value(forKeyPath: #keyPath(Employee.id)) as? [Int] {
print(idArray) // prints [1, 2, 4]
}
map
করে - এটি ক্ষেত্রটি ভরাটEmployee
করে একটি অ্যারেরকে একটি অ্যারে রূপান্তরিতInt
করেid
। যা "সমস্ত উদাহরণ থেকে আইডি ফিল্ডটি বের করে এটিকেEmployee
একটি অ্যারেতে রাখার" বলার সমতুল্য