【问题标题】:How to merge arrays of different objects in Swift [duplicate]如何在Swift中合并不同对象的数组[重复]
【发布时间】:2019-07-06 20:18:32
【问题描述】:

这听起来很简单,但是我如何在 Swift 中合并两个不同类型的数组(Simpson 和 Movie),然后继续按其唯一的公共属性(在本例中为“名称”)按字母顺序排列该对象数组?

struct Simpson {
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
}
let homer = Simpson(age: 39, name: "Homer")
let marge = Simpson(age: 36, name: "Marge")
var simpson = [homer, marge] // [{age 39, name "Homer"}, {age 36, name "Marge"}]

struct Movie {
    var location: String
    var name: String
    init(location: String, name: String) {
        self.location = location
        self.name = name
    }
}
let jaws = Movie(location: "Amity", name: "Jaws")
let et = Movie(location: "LA", name: "E.T")
var movies: [Movie] = [jaws, et] // [{location "Amity", name "Jaws"}, {location "LA", name "E.T"}]

【问题讨论】:

  • 顺便说一下,@Sh_Khan 给出的答案(在我看来)比链接问题中接受的答案更好、更迅速
  • @Sam,当然,但链接问题中票数最高的答案涵盖了它。
  • @vacawama 是的,但这不是最好的解决方案(同样,imo)
  • @Sam,Sh_Khan 的答案与 CodeDifferent 的有何不同?它们都使用协议来联合类型,将公共属性添加到该协议,创建该协议类型的数组,并根据公共属性对该数组进行排序。
  • @vacawama 是的,不是的。但这不是转到另一个问题所看到的答案。

标签: arrays swift higher-order-functions


【解决方案1】:

你需要

protocol SharedName {
    var name : String {get set}
}

struct Simpson: SharedName {
    var name : String = ""
    // add other vars 
}

struct Movie: SharedName {
    var name : String = ""
    // add other vars 
}

然后创建一个数组

var arr:[SharedName] = [] // fill in with different objects from Simpson and Movie
arr.sort { $0.name < $1.name }

提示:

struct摆脱init

init(age: Int, name: String) {
    self.age = age
    self.name = name
}

&

init(location: String, name: String) {
    self.location = location
    self.name = name
}

应该是自动生成的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多