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 语言解决一个成语小问题预先所需要的准备工作。

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

相关推荐
我不是哆啦A梦3 小时前
破解风电运维“百模大战”困局,机械版ChatGPT诞生?
运维·人工智能·python·算法·chatgpt
陈敬雷-充电了么-CEO兼CTO6 小时前
大模型技术原理 - 基于Transformer的预训练语言模型
人工智能·深度学习·语言模型·自然语言处理·chatgpt·aigc·transformer
小溪彼岸9 小时前
GPT-4o的修图能力强的可怕?
chatgpt·aigc
小眼睛FPGA10 小时前
【RK3568+PG2L50H开发板实验例程】FPGA部分/紫光同创 IP core 的使用及添加
科技·嵌入式硬件·ai·fpga开发·gpu算力
asyxchenchong88811 小时前
ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模
机器学习·语言模型·chatgpt
我爱一条柴ya14 小时前
【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
人工智能·ai·ai作画·ai编程·ai写作
赛丽曼1 天前
Assistant API的原理及应用
人工智能·chatgpt
DeepSeek-大模型系统教程1 天前
深入金融与多模态场景实战:金融文档分块技术与案例汇总
人工智能·ai·语言模型·程序员·大模型·大模型学习·大模型教程
程序员鱼皮1 天前
Cursor 网页版来了,这下拉屎时也能工作了
计算机·ai·程序员·开发·项目·编程经验
我是小哪吒2.01 天前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型