Ruby中按指定顺序比较数组,获取已执行的最新构建ID
解决按构建时间顺序查找最新已执行构建ID的问题
首先明确需求:我们有两个数组,list1是按构建时间从新到旧排序的构建ID(首元素最新),list2是已执行过的构建ID集合。我们需要按list1的顺序,找到第一个出现在list2中的构建ID,这个就是最新的已执行构建。
核心思路
因为list1已经是从新到旧排序,所以我们只需要按顺序遍历list1的每个元素,检查它是否存在于list2中。第一个匹配到的元素就是我们要找的结果——毕竟它是list1里最新的、同时又在已执行列表里的构建。
代码实现(Python示例)
这里提供两种简洁的实现方式:
方式1:普通循环遍历
list1 = ["009n1", "009d5", "006d4", "001s5", "008n3"] list2 = ["006d4", "001s5", "008n3", "006j1", "004k1"] latest_executed = None for build_id in list1: if build_id in list2: latest_executed = build_id break # 找到第一个匹配项就停止,不用继续遍历 print(latest_executed) # 输出:006d4
方式2:用next()结合生成器表达式(更简洁)
list1 = ["009n1", "009d5", "006d4", "001s5", "008n3"] list2 = ["006d4", "001s5", "008n3", "006j1", "004k1"] # 把list2转成集合可以提升查找效率,尤其是当list2元素很多的时候 executed_set = set(list2) latest_executed = next((build for build in list1 if build in executed_set), None) print(latest_executed) # 输出:006d4
注意:把
list2转换成集合set是因为集合的成员检查时间复杂度是O(1),比列表的O(n)高效很多,当list2元素数量大的时候,这个优化很有用。
为什么这个方法可行?
因为list1的顺序是严格的新→旧,所以第一个匹配到的元素必然是所有已执行构建中最新的那个,完全符合你的预期结果006d4。
内容的提问来源于stack exchange,提问作者chrisans
相关产品推荐
相关产品推荐

