【问题标题】:Swift 3 Graph: FILTER and CONTAINS for EntitiesSwift 3 图表:实体的过滤器和包含
【发布时间】:2017-02-23 15:06:04
【问题描述】:

这是我的问题。

我有一个“allPlayers”数组实体。

我在“team”和“allPlayers”实体之间有“players”关系。

我想要一份尚未加入该球队的所有球员的名单。

所以:

func availablePlayer(_ team:Entity) -> [Entity] {

    let playersTeam = players.filter { $0.subject == team }.flatMap { [$0.object] }

    let playersAvailable = allPlayers.filter { !playersTeam.contains($0) }

    return playersAvailable
}

在给定球队的球员关系中,将存储所有球员。 然后,我想过滤不包含 playerTeam 的 allPlayers 数组。

但是!playersTeam.contains($0) 给了我一个错误。 实体没有“包含”方法。 它只有“包含(where:)”

有什么想法吗?

【问题讨论】:

  • 您想让您的实体模型符合所需的协议。 Here 我有一个例子(问题是关于 indexOf 但实际上与您的问题相同)。如果你不喜欢这个例子,当然还有很多其他的。 ;) // 或者你可以在contains(where:)中使用闭包,这也可以。

标签: ios xcode graph swift3 cosmicmind


【解决方案1】:

为了回答您的问题,我将按照我理解的方式设置您的模型。首先让我们设置我们的团队实体:

let tA = Entity(type: "Team")
tA["name"] = "A"

let tB = Entity(type: "Team")
tB["name" = "B"

现在还有一些玩家实体。

let p1 = Entity(type: "Player")
p1["name"] = "Daniel"

let p2 = Entity(type: "Player")
p2["name"] = "Eve"

建立关系:

p1.is(relationship: "TeamMember").of(object: ta) 

现在我们全部保存:

let graph = Graph()
graph.sync()

现在我们搜索所有玩家:

let search = Search<Entity>(graph: graph).for(types: "Player")
let players = search.sync()

现在我们希望所有不属于团队的玩家,这意味着他们不属于 TeamMember 关系类型的任何关系。

let result = players.filter { (player) -> Bool in
    return player.relationship(types: "TeamMember").count == 0
}

应该是这样的。如果我理解正确,请告诉我。谢谢!

【讨论】:

    【解决方案2】:

    几乎一切都很完美。 但是我必须返回一份他们不在特定给定球队中的球员名单。 (一个玩家可以同时加入多个团队)

    经过几次尝试,我想出了办法:

    func availablePlayer(_ team:Entity) -> [Entity] {
    
        let playersTeam = Set(players.filter { $0.subject == team }.flatMap { [$0.object] })
    
        let playersAvailable = allPlayers.filter { !playersTeam.contains($0) }
    
        return playersAvailable
    }
    

    在 Set 中转换 playerTeam,我可以使用“contains”方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多