arrays - Swift Set to Array




(6)

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

func getArrayFromSet(set:NSSet)-> NSArray {

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

مثله :

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

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


في أبسط الحالات ، باستخدام 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]

يمكنك إنشاء مصفوفة تحتوي على جميع العناصر من مجموعة Swift معينة مع

let array = Array(someSet)

يعمل هذا لأن Set تتوافق مع بروتوكول SequenceType ويمكن تهيئة Array مع تسلسل. مثال:

let mySet = Set(["a", "b", "a"])  // Set<String>
let myArray = Array(mySet)        // Array<String>
print(myArray) // [b, a]

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

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

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

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

let array = set.array

إضافة :

لا يحتوي Swift على DEFINED ORDER من أجل Set و Dictionary.For هذا السبب يجب استخدام أسلوب sorted () لمنع الحصول على نتائج غير متوقعة مثل صفيفك يمكن أن يكون مثل ["a" أو "b"] أو ["b"، "a "] وأنت لا تريد هذا.

لإصلاح هذا:

للمجموعات

var example:Set = ["a","b","c"]
let makeExampleArray = [example.sorted()]
makeExampleArray 

النتيجة: ["a"، "b"، "c"]

بدون فرز ()

يمكن أن يكون:

["a","b","c"] or ["b","c","a",] or ["c","a","b"] or ["a","c","b"] or ["b","a","c"] or ["c","b","a"] 

الرياضيات البسيطة: 3! = 6


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

لا تستخدم هذا

Object.defineProperty(Array.prototype, 'exists', {
  value: function(element, index) {

    var index = index || 0

    return index === this.length ? -1 : this[index] === element ? index : this.exists(element, ++index)
  }
})


// Outputs 1
console.log(['one', 'two'].exists('two'));

// Outputs -1
console.log(['one', 'two'].exists('three'));

console.log(['one', 'two', 'three', 'four'].exists('four'));





arrays swift set