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