如何检查数组中是不是存在相同的键?

Posted

技术标签:

【中文标题】如何检查数组中是不是存在相同的键?【英文标题】:How do I check if the same key exists in an Array?如何检查数组中是否存在相同的键? 【发布时间】:2021-01-17 13:39:38 【问题描述】:

我正在尝试在 ios 中制作一款 RPG 游戏,并在 Baldurs Gate 中使用类似的对话系统。我在 plist 文件中创建了两个数组。像这样:

如您所见,我有两个数组:PlayerMessage;玩家可以触摸的多个选项和 NPCMessages 的列表(它将是);触摸 PlayerMessage 时显示的文本

我正处于可以触摸 NPC 的阶段,它将显示一个黑框(NPCMessageer 节点),其中包含来自数组的文本(通过 plist 文件的 PlayerMessage)。

但是,我不知道如何连接 PlayerMessage 和 NPC 消息中的项目 0,如果它们存在,请更改消息:SKLabelNode! NPCMessage 中的文本到一个。有谁知道如何比较另一个数组中是否存在另一个项目?

这是我使用的代码:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)

    
    for touch in (touches) 
        
        NPC.name = "NPC"
        
        let Location = touch.location(in: self)
                    
                    var CorrectedLocation = CGPoint()
                    CorrectedLocation.x = Location.x - LocalCamera.position.x
                    CorrectedLocation.y = Location.y - LocalCamera.position.y

        let node = self.atPoint(CorrectedLocation)
        var Message: SKLabelNode!
        Message = SKLabelNode(fontNamed: "Trebuchet MS")

        if (node.name == "NPC") 
            let NPCMessageer = SKSpriteNode (color: UIColor.black, size: CGSize(width:1000, height:1000))
            NPCMessageer.zPosition = 99
            NPCMessageer.position = CGPoint(x:-500, y:-200)
          Message.fontSize = 50
            Message.color = UIColor.white;            Message.position = CGPoint(x:-500, y:-100)
            Message.zPosition = 100

            addChild(NPCMessageer)
            self.addChild(Message)
            for PlayerMessage in NPC.PlayerMessage 
             Message.text = PlayerMessage as?String
            let label = self.atPoint(CorrectedLocation)
            if label.name == "Message"
            
                
                
             if NPC.PlayerMessage == NPC.NPCMessage
             
                Message.text = NPC.NPCMessage as?String
             

【问题讨论】:

我很难理解这个问题,我是否必须了解 SpriteKit 才能理解它,或者您能否澄清您的要求?题外话,但变量应该以小写字母开头,你的代码有点难以阅读。 公平评论。我会改写的。我不知道变量需要以小写字母开头。这适用于所有语言吗? @LaurensvanOorschot 他们没有必须,但它的常见做法是使用“Camel Case”,即 thisIsMyUserVariable,因为许多 iOS 元素都以大写字母开头,这可以区分它们。变量的驼峰式大小写在许多编程语言中都很常见,甚至可以将其用于变量中的首字母缩写词,例如 myNpcMessage。 【参考方案1】:

如果我理解正确,您想从另一个数组中的一个数组中找到给定元素。

然后您可以使用firstIdex(of:),如果元素存在,则使用返回的索引来设置消息对象

let item = PlayerMessage[0] //assuming this is what you want to find

if let index = NPCMessage.firstIndex(of: item) 
    let Message.text = NPCMessage[index]

【讨论】:

以上是关于如何检查数组中是不是存在相同的键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在胶合时分离(带有空格)字符串,使用数组中的键来检查它是否粘合?

如何检查Mysql中是不是存在数组元素?

如何将三个列表合并为一个并保持相同的键

JavaScript:检查对象数组中是不是存在重复的键值并删除所有但最近添加的具有该键值的对象

PHP如何检查一个数组内是不是存在指定元素

Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?