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

如何为每个现有iOS版本匹配符合规则的目标iOS版本?

如何为现有iOS版本匹配对应目标版本

我有两张数据表:

  1. 现有iOS版本表
  2. 目标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.012.5.7
12.0.112.5.7
13.5.015.8.0
16.4.117.2.0
17.1.017.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:13:11