Swift 趣味开发:查找拼音首字母全部相同的 4 字成语(上)

概述

Swift 语言是一门现代化、安全、强大且还算性感的语言。在去年 WWDC 24 中苹果正式推出了秃头码农们期待许久的 Swift 6.0,它进一步完善了 Swift 语言的语法和语义,并再接再厉------强化了现代化并发模型的安全性和灵活性。

这里我们不妨用 Swift 来验证一个实际世界中有趣的小疑问:汉语中到底有没有拼音首字母全部相同的 4 字成语呢?

在本篇博文中,您将学到如下内容:

  • 概述
  • [1. 一个"悬悬而望"的问题](#1. 一个“悬悬而望”的问题)
  • [2. 自力更生](#2. 自力更生)
  • [3. 如何获取汉字的拼音](#3. 如何获取汉字的拼音)
  • 总结

到底问题的谜底将会如何?结果绝对会让大家"始料不及"!

那还等什么呢?Let's go!!!😉


1. 一个"悬悬而望"的问题

我一直对中国博大精深的成语世界兴趣盎然,有个藏在心底很久的问题一直想知道答案:四字成语里有没有 4 个字的拼音首字母都相同的成语呢?

比如 左道旁门(zuǒ dào páng mén) 这个成语中每个字拼音的第一个字母分别为 z、d、p 和 m,不符合要求。而成语 樽俎折冲(zūn zǔ zhé chōng) 前 3 个字的拼音首字母都为 z,可惜最后一个字拼音的首字母却为 c ,从而也无奈的丧失了候选资格。


樽俎折冲

释义:指不以武力而在宴席交谈中制胜敌人,泛指外交谈判活动。折冲,使敌人战车后撤,指击退敌军。

出处:语出汉·刘向《新序·杂事一》

示例:今吾国以存亡关系而不签字,各国当能见谅,必可留作悬案,为他日~之馀地。

★《五四"爱国运动资料·学界风潮记下编》


俗话说得好:"最好的代码是还没有写的代码",所以在实际撸码解决这个问题之前,我想试试有没有其它方法能够找到这个问题的答案,现在很火的"当红炸子鸡" AI 无疑值得一试。

首先尝试的是豆包 AI 引擎。可以看到她似乎没搞懂我的问题,给出了完全错误的答案:

接下来再试试 Kimi 引擎。这次 AI 扳回一局,Kimi 不但正确读懂了我的意图,而且给出了不止一个正确答案:

最后我们再试试 ChatGPT 和其衍生 AI 引擎:

可以看到它开始举了一些错误的例子("心心相印"、"自作自受"等),但随后又给出了几个正确的答案,真不知道它是到底是啥子脑回路。

但好奇心作祟的我们不禁要问:除了上面这些成语,还有其它符合条件的成语吗?


更多其它 Swift 趣味开发的小"栗子",请小伙伴们移步如下链接观赏有趣且精彩的内容:


2. 自力更生

接下来我们就来看看如何撸码来完成这项貌似"艰巨"的任务。

大致的思路其实很简单:先获取尽可能多的成语文本,然后计算它们的拼音,最后判断这些拼音的首字母是否相同。

需要说明的是,如今网上有很多公开的 API 接口可以帮助我们查询某个成语的释义、出处等信息,有的甚至可以模糊查找,比如查询"左"字开头和"门"字结尾的成语。但这些 API 都没有提供遍历所有成语的方法,所以对于我们这个需要蛮力来攻克的问题可能都有些力不从心。

不过不要紧,我们幸运的从网上找到一个包含超过 3w 个成语的文本文件,我想这是一个很好的开端。

3. 如何获取汉字的拼音

在掌控海量成语文本之后,接下来的问题是如何获取它们的拼音。

Swift 对于汉字拼音的支持比小伙伴们想象的要好很多,我们不用借助任何第三方库,只需使用 Swift 系统框架中的 API 即可完美实现。

swift 复制代码
let idiomString = "樽前月下"
print(idiomString)
let cfString = CFStringCreateMutableCopy(nil, 0, idiomString as CFString)
CFStringTransform(cfString, nil, kCFStringTransformToLatin, false)
print("带声调的拼音:\(cfString! as String)")
CFStringTransform(cfString, nil, kCFStringTransformStripCombiningMarks, false)
print("不带声调的拼音: \(cfString! as String)")

运行结果如下所示,我们可以选择输出带声调或不带声调的拼音:

不过本例中我们无需多此一举,因为对应的成语文本文件中已经包含了拼音信息,实际上除了拼音以外该文件还包含了与每个成语相关的其它丰富信息:

樽酒论文 拼音:zūn jiǔ lùn wén释义:一边喝酒,一边议论文章。出处:唐·杜甫《春日忆李白》诗何时一樽酒,重与细论文。"示例:连年客里度初度,~第一遭。★陈世宜《上巳社集是日值余初度》诗

其中甚至包括了许多超过 4 字的成语:

来是是非人,去是是非者 拼音:lái shì shì fēi rén,qù shì shì fēi zhě释义:犹言解铃还是系铃人。指谁惹起的是非,还得由谁来了结。出处:无示例:无

其实这些附加内容对我们这个例子来说基本没啥用,而且带来了解析上的额外麻烦。不过不要紧,因为我们本来就是在"自找麻烦"。

在下一篇博文中,看我们如何继续扮演"麻烦制造者"的角色,不见不散!


想要进一步系统地学习 Swift 开发的小伙伴们,可以来我的《Swift 语言开发精讲》专栏逛一逛哦:


总结

在本篇博文中,我们讨论了用 Swift 语言解决一个成语小问题预先所需要的准备工作。

感谢观赏,我们下一篇见!😎

相关推荐
爱笑的眼睛114 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
土星云SaturnCloud6 小时前
液冷“内卷”:在局部优化与系统重构之间,寻找第三条路
服务器·人工智能·ai·计算机外设
brave and determined6 小时前
CANN训练营 学习(day9)昇腾AscendC算子开发实战:从零到性能冠军
人工智能·算法·机器学习·ai·开发环境·算子开发·昇腾ai
小北方城市网7 小时前
鸿蒙6.0:生态质变与全场景智慧体验的全面跃升
人工智能·ai·鸿蒙6.0
Swizard9 小时前
别再只会算直线距离了!用“马氏距离”揪出那个伪装的数据“卧底”
python·算法·ai
大刘讲IT10 小时前
2025年企业级 AI Agent 标准化落地深度年度总结:从“对话”到“端到端价值闭环”的范式重构
大数据·人工智能·程序人生·ai·重构·制造
沛沛老爹10 小时前
Web开发者快速上手AI Agent:提示词应用优化实战
人工智能·ai·agent·提示词·rag·入门知识
中国胖子风清扬10 小时前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
广州明周科技10 小时前
Revit 200+新功能之“明周科技功能商店 AI推荐助手”
科技·ai·信息可视化·bim·revit二次开发·revit·deepseek
崽崽长肉肉10 小时前
swift中的知识总结(一)
ios·swift