如何为每个现有iOS版本匹配符合规则的目标iOS版本?
如何为现有iOS版本匹配对应目标版本
我有两张数据表:
- 现有iOS版本表
- 目标iOS版本表
匹配规则:
- 现有版本 ≤ 12.5.7 时,匹配12.5.7
- 12.5.7 < 现有版本 ≤ 15.8.0 时,匹配15.8.0
- 现有版本 > 15.8.0 时,匹配17.2.0
现有iOS版本表
| iOS版本 |
|---|
| 11.0.0 |
| 12.0.1 |
| 13.5.0 |
| 16.4.1 |
| 17.1.0 |
目标iOS版本表
| 目标iOS版本 |
|---|
| 12.5.7 |
| 15.8.0 |
| 17.2.0 |
期望匹配结果
| iOS版本 | 目标iOS版本 |
|---|---|
| 11.0.0 | 12.5.7 |
| 12.0.1 | 12.5.7 |
| 13.5.0 | 15.8.0 |
| 16.4.1 | 17.2.0 |
| 17.1.0 | 17.2.0 |
解决方案
1. Excel/Google Sheets 实现
方法一:嵌套IF函数
假设现有版本在A列(从A2开始),在目标版本列输入公式:
=IF(A2<=12.57, "12.5.7", IF(A2<=15.8, "15.8.0", "17.2.0"))
如果版本是文本格式,需要用VALUE()转换后比较:
=IF(VALUE(A2)<=VALUE("12.5.7"), "12.5.7", IF(VALUE(A2)<=VALUE("15.8.0"), "15.8.0", "17.2.0"))
方法二:LOOKUP函数(更简洁)
利用区间匹配,直接返回对应目标版本:
=LOOKUP(A2, {0,12.58,15.81}, {"12.5.7","15.8.0","17.2.0"})
这里的{0,12.58,15.81}是区间下限,确保大于12.5.7的版本进入下一个匹配区间。
2. Python 实现
使用packaging.version模块精准比较版本号(避免字符串比较的逻辑错误,比如"12.10.0"和"12.9.0"的字符串比较会出错)。
先安装依赖:
pip install packaging
代码实现:
from packaging.version import Version import pandas as pd # 定义匹配规则:(上限版本, 目标版本) match_rules = [ (Version("12.5.7"), "12.5.7"), (Version("15.8.0"), "15.8.0"), (Version("999.999.999"), "17.2.0") # 兜底的超大版本,匹配所有更高版本 ] # 现有版本列表 existing_versions = ["11.0.0", "12.0.1", "13.5.0", "16.4.1", "17.1.0"] # 生成匹配结果 result = [] for ver in existing_versions: current_ver = Version(ver) for upper_limit, target_ver in match_rules: if current_ver <= upper_limit: result.append({"iOS版本": ver, "目标iOS版本": target_ver}) break # 输出为DataFrame df = pd.DataFrame(result) print(df)
3. SQL 实现
假设现有版本表名为existing_ios,使用CASE WHEN语句实现匹配:
SELECT ios_version, CASE WHEN ios_version <= '12.5.7' THEN '12.5.7' WHEN ios_version <= '15.8.0' THEN '15.8.0' ELSE '17.2.0' END AS target_ios_version FROM existing_ios;
如果数据库对字符串版本号比较有误差,可转换为数组后比较(以PostgreSQL为例):
SELECT ios_version, CASE WHEN string_to_array(ios_version, '.')::int[] <= string_to_array('12.5.7', '.')::int[] THEN '12.5.7' WHEN string_to_array(ios_version, '.')::int[] <= string_to_array('15.8.0', '.')::int[] THEN '15.8.0' ELSE '17.2.0' END AS target_ios_version FROM existing_ios;
内容的提问来源于stack exchange,提问作者uhohitzmike
相关产品推荐
相关产品推荐

