[arrays] Swift Set to Array



2 Answers

في أبسط الحالات ، باستخدام Swift 3 ، يمكنك استخدام init(_:) initializer للحصول على Array من Set . init(_:) لديه التصريح التالي:

init<S>(_ s: S) where S : Sequence, Element == S.Iterator.Element

ينشئ مصفوفة تحتوي على عناصر التسلسل.

الاستعمال:

let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy")    
let stringArray = Array(stringSet)

print(stringArray)
// may print ["toy", "car", "bike", "boat"]

ومع ذلك ، إذا كنت ترغب أيضًا في إجراء بعض العمليات على كل عنصر من عناصر Set الخاصة بك أثناء تحويله إلى Array ، فيمكنك استخدام map و flatMap sort filter وغير ذلك من الطرق الوظيفية التي يوفرها بروتوكول Collection :

let stringSet = Set(["car", "boat", "bike", "toy"])
let stringArray = stringSet.sorted()

print(stringArray)
// will print ["bike", "boat", "car", "toy"]
let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy") 
let stringArray = stringSet.filter { $0.characters.first != "b" }

print(stringArray)
// may print ["car", "toy"]
let intSet = Set([1, 3, 5, 2]) 
let stringArray = intSet.flatMap { String($0) }

print(stringArray)
// may print ["5", "2", "3", "1"]
let intSet = Set([1, 3, 5, 2])
// alternative to `let intArray = Array(intSet)`
let intArray = intSet.map { $0 }

print(intArray)
// may print [5, 2, 3, 1]
Question

يمكن تحويل NSSet إلى Array باستخدام set.allObjects() ولكن لا توجد مثل هذه الطريقة في المجموعة الجديدة (المقدمة مع Swift 1.2). لا يزال من الممكن القيام به عن طريق تحويل Swift Set إلى NSSet واستخدام طريقة allObjects() ولكن ليس الأمثل.




لقد قمت بإنشاء ملحق بسيط يمنحك صفيفًا لم يتم فرزه كممتلكات لـ Set in Swift 4.0 .

extension Set {
    var array: [Element] {
        return Array(self)
    }
}

إذا كنت تريد مصفوفة تم فرزها ، فيمكنك إما إضافة خاصية محسوبة إضافية ، أو تعديل الخاصية الحالية لتناسب احتياجاتك.

لاستخدام هذا ، فقط اتصل

let array = set.array



استدعاء هذه الطريقة وتمرير مجموعة الخاص بك

func getArrayFromSet(set:NSSet)-> NSArray {

return set.map ({ String($0) })
}

مثله :

var letters:Set = Set<String>(arrayLiteral: "test","test") // your set
print(self.getArrayFromSet(letters))





Related