如何在CPLEX中通过两个数组生成第三个数组
在CPLEX中生成两个数组的差集数组
要实现从第一个数组里剔除第二个数组包含的元素,生成目标第三个数组,你可以利用CPLEX的集合推导式和数组转换来完成,以下是完整可运行的代码示例:
int a=10; range aa=1..a; int b=3; range bb=1..b; // 先通过集合推导式筛选出差集元素 {int} diffSet = { firstarray[i] | i in aa : firstarray[i] not in { secondarray[j] | j in bb } }; // 根据差集的元素数量定义第三个数组的范围 range cc=1..card(diffSet); int firstarray[a]=[1,2,3,4,5,6,7,8,9,10]; int secondarray[b]=[1,4,9]; // 将集合元素转换为数组 int thirdarray[cc] = [ diffSet[k] | k in cc ]; execute { writeln("生成的第三个数组:", thirdarray); }
关键逻辑说明:
- 用集合推导式
diffSet筛选出firstarray中不在secondarray内的元素,集合会自动处理重复元素(如果原数组存在重复值) - 通过
card(diffSet)获取差集的元素个数,以此定义第三个数组的索引范围cc - 最后用数组推导式把集合中的元素转换为目标数组
thirdarray,通过execute块可以直接输出结果
运行代码后,thirdarray会得到预期的[2,3,5,6,7,8,10]。
内容的提问来源于stack exchange,提问作者MO MO MA
相关产品推荐
相关产品推荐

