首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在对象数组中搜索数组

在对象数组中搜索数组
EN

Stack Overflow用户
提问于 2016-07-21 17:15:02
回答 4查看 472关注 0票数 2

我需要搜索数组中的“英雄”中的每一个对象,以寻找每个英雄(etc,chromie等)。在它的协同数组中有一个项目等于“Xul”(“Xul”最终会被用户更改为变量输入)。然后,我需要为每个匹配的属性增加"pickValue“属性。

因此,在本例中,搜索将匹配chromie并增加其选择值。

下面的筛选器允许我将匹配的项放到另一个数组中,但我不认为筛选器能满足我的需要,因为我需要保持数组“英雄”的机智,只需增加属性"pickValue“

代码语言:javascript
复制
let filteredHeroes = heroes.filter( { $0.synergy.contains("Xul") } )

我已经疯了,想要怎么做,但我找不到。我一直遵循的教程也没有涉及到这一点。下面是其他相关信息。

代码语言:javascript
复制
class Hero{

    var name: String
    var role: String
    var synergy: [String]
    var strong: [String]
    var weak: [String]
    var pickValue = 0

    init(name: String, role: String, synergy: [String], strong: [String], weak: [String]){
        self.name = name
        self.role = role
        self.synergy = synergy
        self.strong = strong
        self.weak = weak
    }

}
// there are about 50 of these "heroes"
    var abathur = Hero(name: "Abathur", role: "Ranged Specialist", synergy: ["Illidan", "Chromie"], strong: ["Tracer", "Murky"], weak: ["Zeratul", "Nova"])
    var chromie = Hero(name: "Chromie", role: "Ranged Assassin", synergy: ["Xul", "Johanna"], strong: ["Abathur", "Zagara"], weak: ["Tracer", "Greymane"])


var heroes = [Hero]()
heroes.append(abathur) // appended all heroes
heroes.append(chromie)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-21 23:40:57

提供的所有答案都是正确的,它们将允许您修改原始数组中的pickValue,而不会丢失任何元素。

原因是英雄:英雄是一组对象,而不是结构。当您使用.map()、.filter()等操作对象数组时,获得的新数组包含对与原始数组相同的对象实例的引用。因此,从新数组中进行更改实际上也会修改原始数组中的Hero。

如果英雄是一个结构,那么你确实会遇到你似乎在担心的问题。

票数 1
EN

Stack Overflow用户

发布于 2016-07-21 17:24:56

为此,您可能需要使用map()flatMap()函数。如果你在谷歌上搜索"Swift高级功能“并寻找这两种功能,你会看到一些非常好的文章,介绍如何使用它们来实现你想要的东西。

票数 0
EN

Stack Overflow用户

发布于 2016-07-21 17:47:53

这对我适用于你的班级:

代码语言:javascript
复制
func updatePickValue(heroes: [Hero], withValue: Int, forSynergy: String) {
    let filteredResults = heroes.filter({$0.synergy.contains(forSynergy)})
    for hero in filteredResults {
        hero.pickValue = withValue
    }

}

在实际操作中,您可以使用以下方法进行测试:

代码语言:javascript
复制
print(chromie.pickValue)

updatePickValue(heroes, withValue: 1, forSynergy: "Xul")

print(chromie.pickValue)

编辑:问题的澄清

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38510477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档