arrays - সি প্রোগ্রামিং বেসিক




সমতল[যে কোনও] অ্যারে সুইফ্ট ift (2)

this স্ট্যাক ওভারফ্লো প্রশ্নটি ব্যবহার করে আমার কাছে নিম্নলিখিত কোড রয়েছে।

let numbers = [1,[2,3]] as [Any]
var flattened = numbers.flatMap { $0 }
print(flattened) // [1, [2, 3]]

[1, [2, 3]] তে সমতল করার পরিবর্তে আমি এটি [1, 2, 3]

সুইফটে এটি অর্জনের সবচেয়ে সহজ / পরিষ্কার উপায় কী?


এখানে @ rmaddy এর যে anyFlatten ফ্ল্যাটনের বিকল্প প্রয়োগ রয়েছে:

এটি সবচেয়ে সংক্ষিপ্তভাবে এর মতো লেখা যেতে পারে তবে এটি বেশ রহস্যজনক:

extension Array {
    func anyFlatten() -> [Any] {
        return self.flatMap{ ($0 as? [Any]).map{ $0.anyFlatten() } ?? [$0] }
    }
}

এখানে আরও যুক্তিসঙ্গত বাস্তবায়ন:

extension Array {
    func anyFlatten() -> [Any] {
        return self.flatMap{ element -> [Any] in
            if let elementAsArray = element as? [Any] { return elementAsArray.anyFlatten() }
            else { return [element] }
        }
    }
}

এটি সমাধানের আরও ভাল উপায় হতে পারে তবে একটি সমাধান হ'ল অ্যারেতে আপনার নিজস্ব এক্সটেনশন লিখুন:

extension Array {
    func anyFlatten() -> [Any] {
        var res = [Any]()
        for val in self {
            if let arr = val as? [Any] {
                res.append(contentsOf: arr.anyFlatten())
            } else {
                res.append(val)
            }
        }

        return res
    }
}

let numbers = [1,[2, [4, 5] ,3], "Hi"] as [Any]
print(numbers.anyFlatten())

আউটপুট:

[1, 2, 4, 5, 3, "হাই"]

এই সমাধানটি অ্যারেগুলির কোনও নেস্টিং পরিচালনা করবে।





swift