- 36
- 0
如题,要对比两个列表,列表里面是商品套餐对象,套餐里面有tag分类,分类里面有商品,商品中有不同的口味组,口味组中有不同的子口味,做了9个循环,怕被组长砍死,特来求助各路大神
// 遍历第一组套餐
for (var x = 0; x < packageInfoList.length;x++){
// 拿到第二组中的的套餐
var newPackage = ConfigData.getGoods(true, package.id);
// 遍历第一组中的tag分类
for (var y = 0; y < package.packageTag.length;y++){
var oldTag = package.packageTag[y];
for (var z = 0; z < newPackage.packageTag.length;z++){
var newTag = newPackage.packageTag[z]; // 第二组中的tag分类
if (package.packageTag.id == newPackage.packageTag.id){
// 遍历第一组的商品中的tag分类中的 商品
for (var m = 0; m < oldTag.goods.length;m++){
// 遍历第二组的商品中的tag分类中的 商品
for (var n = 0; n < newTag.goods.length;n++){
if (oldTag.goods[m].id === newTag.goods[n].id){
var flag = updateGoodAttr(oldTag.goods[m], newTag.goods[n])
}
}
}
}
}
}
}
代码基本如上图
[ // 套餐列表
{ // 套餐对象
tag: [ // tag 分类列表
{ // tag对象
goods:[ // goods 列表
{ // good 对象
attr: [ // 口味组列表(如辣度)
{ // 口味组
option:[ // 口味列表
taste1: {},
taste2: {},
taste3: {},
......
]
}
]
}
]
}
]
}
]
列表数据结构如上
而且方法updateGoodAttr中对比两个商品,也跑了4层的循环,加起来就9层了,有没有什么好的解决方案,
由于每个属性都存在绑定关系(这个口味就是绑定到了这个商品,这个上商品就是绑定了这个套餐),所以不能把所有的口味taste提取出来对比,这样9层循环,到了后面毫无维护性,而且性能爆炸
求助,来份神代码 揪揪 me,
白鞋
- 共 0 条
- 全部回答
-
懸崖邊的愛 普通会员 1楼
在Python中,如果一个套餐对象被多次套用九层循环,那么可能在某些情况下会导致性能问题。以下是一些优化方法:
- 使用生成器:生成器是一种特殊的迭代器,它可以在迭代过程中暂停,从而节省内存和提高效率。对于你的问题,你可以使用一个生成器来生成每个套餐对象的九层循环,而不是直接创建一个新的九层循环对象。这将允许你同时生成多个套餐对象,而不是一次性生成所有。
python def create套餐(num): for _ in range(num): yield {'name': '套餐1', 'price': 10, 'quantity': 100}然后,你可以使用这个生成器来创建多个套餐对象:
python 套餐1 = create套餐(9) 套餐2 = create套餐(9) 套餐3 = create套餐(9)- 使用列表推导式:如果你的套餐对象都是一样的,你可以使用列表推导式来创建一个新的列表,其中包含每个套餐对象的九层循环。
python 套餐_list = [create套餐(9) for _ in range(9)]- 使用集合:如果你的套餐对象都是一样的,你可以使用集合来获取每个套餐对象的唯一ID,然后在循环中检查ID是否已经存在于列表中。如果存在,那么你可以跳过当前的套餐对象,否则继续循环。
python 套餐_list = [create套餐(9) for _ in range(9)] seen = set() for i, obj in enumerate(套餐_list): if obj['id'] not in seen: seen.add(obj['id']) yield obj这些优化方法可以让你在大多数情况下提高套餐对象套用九层循环的效率。但是,如果你的套餐对象的结构或者行为不同,那么你可能需要根据具体情况进行调整。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
