c# 4种循环算法优化

PandLee 2015-10-15 09:16:17
1.

foreach (DataRow dr in tb.Rows)
{
FarmActivityInfo item = ConvertToFarmActivityInfo(dr);
ls.Add(item);

foreach (DataRow adr in apitb.Rows)
{
if (item.ID == adr["ID"].ToString())
{
apitb.Rows.Remove(adr);
break;
}
}
}

2.
foreach (DataRow adr in apitb.Rows)
{
if (feilds.Contains(adr["fieldid"].ToString()))
{
FarmActivityInfo item = ConvertToFarmActivityInfoByAPI(adr);
ls.Add(item);
}
}


3.


for (int i = 0; i < ls.Count; i++)
{
List<FarmActivityInfo> Details = new List<FarmActivityInfo>();
for (int j = 0; j < ls.Count; j++)
{
if (j != i)
{
if (ls[j].AgronomicID==ls[i].ID)
{
Details.Add(ls[j]);
ls.RemoveAt(j);
if(i>j)
i--;
j--;
}
}
}
ls[i].Details = Details.ToArray();
}


4.

foreach (DataRow fdr in feildtb.Rows)
{
feilds += fdr["FIELDID"].ToString() + ",";
}


各位能回答几个就回答几个,都算分的
...全文
702 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajianchina 2015-10-15
  • 打赏
  • 举报
回复
恩,真是两个,那行。
PandLee 2015-10-15
  • 打赏
  • 举报
回复
引用 3 楼 ajianchina 的回复:
第1、3两个全部不可以这么写,循环体内对元素移除的操作将导致异常。 第2个没什么值得优化的 第4个关于拼接字符串的feilds应该采用StringBuilder类型,datatable可以先转换为Enumerable<T>后查询出FIELDID字段数组,用string.Join方法按逗号连接,就只需一句代码,也不存在最后像你这样还拖一个逗号的尾巴。
但是我索引做了变动的,应该不得报异常了吧? 第三个需递减循环: 是内递减还是外呢?为什么要递减呢?不都遍历所有吗
Poopaye 2015-10-15
  • 打赏
  • 举报
回复
第4个
StringBuilder a = new StringBuilder(feilds);
foreach (DataRow fdr in feildtb.Rows)
{
    a.Append(fdr["FIELDID"].ToString()).Append(',');
}
feilds = a.ToString();
PandLee 2015-10-15
  • 打赏
  • 举报
回复
引用 5 楼 ajianchina 的回复:
第一个我看了还是不行啊,你只跳出内循环体,外循环还在继续,要出错啊。
是两个datatable哟
ajianchina 2015-10-15
  • 打赏
  • 举报
回复
第一个我看了还是不行啊,你只跳出内循环体,外循环还在继续,要出错啊。
ajianchina 2015-10-15
  • 打赏
  • 举报
回复
第一个跳出了没问题,第三个需递减循环,不能递增。
ajianchina 2015-10-15
  • 打赏
  • 举报
回复
第1、3两个全部不可以这么写,循环体内对元素移除的操作将导致异常。 第2个没什么值得优化的 第4个关于拼接字符串的feilds应该采用StringBuilder类型,datatable可以先转换为Enumerable<T>后查询出FIELDID字段数组,用string.Join方法按逗号连接,就只需一句代码,也不存在最后像你这样还拖一个逗号的尾巴。
PandLee 2015-10-15
  • 打赏
  • 举报
回复
第一个删除后break了,没有继续遍历就不会报错了; steingbuilder是怎么个用法呢? 数据比较多的情况下,这4个循环是否比较浪费效率呢?
  • 打赏
  • 举报
回复
第一个不报错?foreach中执行删除 第四个拼字符串用steingbuilder,当然如果你的数据行数不多,直接加也没啥明显影响 你这四个看起来做的不是一件事情,也不知道你要优化啥

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧