Redian新闻
>
if 里面嵌套for,能优化一下代码吗?
avatar

if 里面嵌套for,能优化一下代码吗?

gooog
楼主 (北美华人网)
#定义if的条件变量shuffle shuffle = true # shuffle = false
if(shuffle) { 口口g = 100; 口口m = 2; 口口blocks; # 这段代码输出是b,输入是x 口口for(int i=0; i< m; i++){ 口口口口a = f1(b) + g; 口口} } else { 口口g= 200; 口口m = 3; 口口blocks; # 这段代码输出是b,输入是x,与上面那个无论是输入还是输出的数值都是一模一样的。 口口for(int i=0; i< m; i++){ 口口口口a = f2(b) + g; 口口} }
请问这段代码还能优化吗?
因为这个blocks非常长,大概1万行。而这个是完全一模一样的。大家怎么处理这段代码? 1) 把blocks变成一个函数。这个方法好吗? 2) 有啥办法让blocks代码只写一次,然后把if嵌入到for里面去? 3) 其他方法
类似上面这段代码,在编程的时候,有大量行的blocks是一模一样的。大家有不写成函数的时候吗?比如:输入参数太多了。输出参数多且类型也多。比如1000个输入参数,100个不同维数的矩阵输出。 不写成函数,但是重复代码,有什么利?有什么不利? 会影响程序的运行速度吗?(好像还会比写成函数运算快一些。对吧。) 会占用更多的内存吗?

avatar
dustflying
2 楼
#定义if的条件变量shuffle shuffle = true # shuffle = false
if(shuffle) { 口口g = 100; 口口m = 2; 口口blocks; # 这段代码输出是b,输入是x 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口} } else { 口口g= 200; 口口m = 3; 口口blocks; # 这段代码输出是b,输入是x,与上面那个无论是输入还是输出的数值都是一模一样的。 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口} }
请问这段代码还能优化吗?
因为这个blocks非常长,大概1万行。而这个是完全一模一样的。大家怎么处理这段代码? 1) 把blocks变成一个函数。这个方法好吗? 2) 有啥办法让blocks代码只写一次,然后把if嵌入到for里面去? 3) 其他方法


gooog 发表于 2023-09-14 10:29

你是新手吗?
为什么不写成这样:
if(shuffle) { 口口g = 100; 口口m = 2;
} else { 口口g= 200; 口口m = 3;
}
口口blocks; # 这段代码输出是b,输入是x,与上面那个无论是输入还是输出的数值都是一模一样的。 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口}
avatar
xcosmos
3 楼
#定义if的条件变量shuffle shuffle = true # shuffle = false
if(shuffle) { 口口g = 100; 口口m = 2; 口口blocks; # 这段代码输出是b,输入是x 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口} } else { 口口g= 200; 口口m = 3; 口口blocks; # 这段代码输出是b,输入是x,与上面那个无论是输入还是输出的数值都是一模一样的。 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口} }
请问这段代码还能优化吗?
因为这个blocks非常长,大概1万行。而这个是完全一模一样的。大家怎么处理这段代码? 1) 把blocks变成一个函数。这个方法好吗? 2) 有啥办法让blocks代码只写一次,然后把if嵌入到for里面去? 3) 其他方法


gooog 发表于 2023-09-14 10:29

可以把blocks弄成一个函数 在进入if statement之前算一次就好了 f(b)也可以只算一次在if 之前只算一次
avatar
xcosmos
4 楼
可以把blocks弄成一个函数 在进入if statement之前算一次就好了 f(b)也可以只算一次在if 之前只算一次
xcosmos 发表于 2023-09-14 10:39

就是 b=blocks(x) new variable=f(b) if(shuffle){ for loop } else{ for loop }
avatar
gooog
5 楼
你是新手吗?
为什么不写成这样:
if(shuffle) { 口口g = 100; 口口m = 2;
} else { 口口g= 200; 口口m = 3;
}
口口blocks; # 这段代码输出是b,输入是x,与上面那个无论是输入还是输出的数值都是一模一样的。 口口for(int i=0; i< m; i++){ 口口口口a = f(b) + g; 口口}
dustflying 发表于 2023-09-14 10:38

不好意思。for循环里的f(b)在条件if下,一个是f1,一个是f2,它们有些细微的区别。
avatar
一生所爱
6 楼
回复 1楼gooog的帖子
for loop 跟if 没有任何关系啊,为啥要写在if里面? if 只管赋值就好
avatar
wantU
7 楼
chatgpt一下
avatar
nickbear
8 楼
不好意思。for循环里的f(b)在条件if下,一个是f1,一个是f2,它们有些细微的区别。
gooog 发表于 2023-09-14 10:53

那就修改f1,f2成一样的,或者加parameter控制行为 软件可复用的基本原则就是模块化和consolidate重复逻辑
avatar
pineappletin
9 楼
我觉得当年我果断放弃编程是正确的…
avatar
gooog
10 楼
那就修改f1,f2成一样的,或者加parameter控制行为 软件可复用的基本原则就是模块化和consolidate重复逻辑
nickbear 发表于 2023-09-14 10:59

f1,f2不能改成一样的。受shuffle这个参数控制。
avatar
gokgs
11 楼
g = shuffle ? 100 : 200; m = shuffle ? 2 : 3; blocks; for(int i=0; i< m; i++){ tmp = shuffle ? f1(b) : f2(b); a = tmp + g; }
马工的脸都让你们给丢尽了。
avatar
xcosmos
12 楼
不好意思。for循环里的f(b)在条件if下,一个是f1,一个是f2,它们有些细微的区别。
gooog 发表于 2023-09-14 10:53

那就只把blocks放到if之前就好了
avatar
verayao
13 楼
把for loop写成function take 你的各种变量 b x f 就不用重复了 我刚开始写代码的时候mentor说 never repeat yourself
相关阅读
我实在选不出来,一黑一白你们喜欢哪个(高清)苏珊米勒每日运势2023年9月14日夏练三伏金碧辉煌卢浮宫2023年9月14日历史上的今天长篇小说连载《此世,此生》第五十二章四2023年9月14日价格早报还是要多读闲书,提高内在思维格局啊,否则外在面相越来越干枯憔悴尖酸而不自知这样的旅行是不是太奢侈了啊环法第十五站-----继续相爱相杀2023年9月14日医疗晨报霍启刚被聘为中粮集团外部董事万能的华人,请教一道7年级孩子的数学题玻璃缸里的孙凤 (22)中国证监会:境外发行上市备案补充材料要求(2023年9月22日—2023年9月28日)有些人是不是注定事业没起色?又反转!马斯克的前女友和美女下属,突然和解了马斯克自曝前女友性感照!真不拿网友当外人啊……广东鳄鱼暴雨中出逃已抓回36条,不要靠近附近水域【冯站长说安全】2023年9月14日【冯站长之家】2023年9月14日(周四)三分钟新闻早餐男子抢劫156元分赃30元躲进山洞14年【冯站长说安全】2023年9月11日晚上应该没收孩子的手机吗?Eddie Bauer 罕见经典款闪促, 黑色的mirco therm羽绒服6折Reiki是不是什么都能治?校长要求在学校手机上交!成为单亲妈妈后的生活会有多难?诗朗诵:迟到的月光白百合同款,衣服真好看or靠脸?杨绛:“当你在选择伴侣时,应该选择一个有钱的,而不是贫穷的”西班牙王后这新发型还挺不错的减脂营又要开始啦Beijing 大兴机场牛肉面64.5cny,合算吗?刀子嘴的人就是刀子心,有的男生嘴巴好毒啊,高中群里一个男生嘲讽一个女生的的老公现在工作真的很难找吗?2023年9月14日物联网新闻住尔湾的注意了,小心被盯上把美好的东西撕碎了给人看这究竟是一种什么写作手法?2023年9月14日(周四)冯站长之家三分钟晚间新闻美麗阿拉斯加(四)冰川灣 (Glacier Bay)UNC又lockdown了
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。