You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4:如何判断UILabel文本与字符串含相同元素(顺序不限)

判断UILabel文本与指定字符串是否为变位词(字符相同、数量一致、顺序不限)

嘿,这个需求本质上就是判断两个字符串是不是**变位词(Anagram)**嘛,我给你分享两个在Swift里实用的实现方案,完美适配你的场景:

方案一:排序对比法(简单直观,适合大多数场景)

这个思路超直接:把两个字符串的字符拆成数组,排序之后再转成字符串,如果结果相等,说明它们的字符组成完全一致(顺序不影响)。

要注意的是label.text是可选类型(String?),所以得先处理空值情况,比如默认转成空字符串。

代码示例

@IBOutlet weak var label: UILabel!
var word: String = "house"

// 处理label.text的可选值,空值默认转为空字符串
let labelText = label.text ?? ""

// 核心判断逻辑
let isCharMatch = labelText.sorted() == word.sorted()

if isCharMatch {
    print("label文本和word的字符组成完全一致!")
} else {
    print("两者字符组成不一样哦")
}

像你示例里的label.text = "ouhse","ouhse".sorted()会得到["e","h","o","s","u"],和"house".sorted()的结果完全相同,所以会返回true。

方案二:字符计数法(高效适合长字符串)

如果字符串很长,排序法的时间复杂度是O(n log n),这时候用计数法更高效(时间复杂度O(n))。思路是统计每个字符出现的次数,然后对比两个统计结果是否一致。

代码示例

先写一个辅助函数来统计字符出现次数:

func countCharacterFrequency(_ str: String) -> [Character: Int] {
    var frequencyDict = [Character: Int]()
    for char in str {
        frequencyDict[char, default: 0] += 1
    }
    return frequencyDict
}

然后在你的场景里直接用:

@IBOutlet weak var label: UILabel!
var word: String = "house"

let labelText = label.text ?? ""
let labelCharFreq = countCharacterFrequency(labelText)
let wordCharFreq = countCharacterFrequency(word)

let isCharMatch = labelCharFreq == wordCharFreq

if isCharMatch {
    print("字符组成一致!")
} else {
    print("字符组成不同")
}

这个方法会统计每个字符的出现次数,比如"house"和"ouhse"里每个字符都只出现1次,两个字典完全相等,所以返回true。

额外注意点

  • 如果需要区分大小写(比如"House"和"house"算不同),直接用上面的代码就行;如果要忽略大小写,可以先把两个字符串转成小写(或大写)再处理:labelText.lowercased().sorted() == word.lowercased().sorted()
  • 要是需要过滤特殊字符或空格,可在处理前先对字符串做清洗,比如用正则去掉非字母字符。

内容的提问来源于stack exchange,提问作者Unknown_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:08:23