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

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

相关推荐
LayZhangStrive4 小时前
Agent开发 - 实现人类与Manus智能体的终端窗口命令交互
ai·交互·agent·react·终端·manus
木圭的AI时代指南4 小时前
为了跑星火Spark-X2.5,我把 llama.cpp 重新编译了一遍
大数据·人工智能·ai·语言模型
Web极客码5 小时前
Pydantic 校验通过不等于答案正确:如何识别 LLM 的语义错误
服务器·人工智能·ai·llm
兜里只有三分钱~5 小时前
【SenseNova U1.5 Lite实战】AMD ROCm 192G显存部署全流程与性能调优
ai·日日新·sensenova
东坡肘子5 小时前
当 Mac mini 的价格不再 mini -- 肘子的 Swift 周报 #152
人工智能·swiftui·swift
蒲公英eric14 小时前
从页面检查到功能验证:DVWA 授权绕过模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·授权绕过模块
AI老陈说16 小时前
Nano Banana 2 AI 角色一致性怎么保持?Flux Art 同一角色换动作与版本管理
ai·ai工具·ai生图
嘿嘿-6616 小时前
Windows 一键使用 GPT-6 Astra:Codex CLI 配置教程
java·人工智能·windows·gpt·chatgpt·web
三声三视19 小时前
审计清单函数名写成 def?tri-checklist 的 diff 解析在 Python 改名场景下悄悄翻车
人工智能·ai·skillhub·tri-checklist·tri-skills
VIP_CQCRE20 小时前
用 Ace Data Cloud 接入 Kling Motion:让 AI 视频生成从“好看”走向“可控”
ai·api·视频生成·kling·acedatacloud