加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 每次跳过20个项目的循环

发布时间:2020-12-15 23:38:43 所属栏目:百科 来源:网络整理
导读:我想编写一个for循环,它将遍历现有列表,并在每次迭代时从该列表中取出20个项目. 所以像这样: 如果过滤列表包含让我们说68项…… 前3个循环每个需要20次,然后在最后的第4次迭代中,它将占用列表中的8个项目中的其余项目… 我写过这样的话: var allResponses=
我想编写一个for循环,它将遍历现有列表,并在每次迭代时从该列表中取出20个项目.

所以像这样:

>如果过滤列表包含让我们说68项……
>前3个循环每个需要20次,然后在最后的第4次迭代中,它将占用列表中的8个项目中的其余项目…

我写过这样的话:

var allResponses= new List<string>();
for (int i = 0; i < filteredList.Count(); i++)
{
    allResponses.Add(GetResponse(filteredList.Take(20).ToList()));
}

假设filteredList是包含68个项目的列表.我认为这不是一种方法,因为我不想循环到集合大小,但不是68次,它应该是4次,每次我从列表中取出20项……如何我可以这样做吗?

解决方法

你非常接近 – 只需添加一个对Skip的调用,并将Count除以20并进行四舍五入:

var allResponses= new List<string>();
for (int i = 0; i < (filteredList.Count+19) / 20; i++) {
    allResponses.Add(GetResponse(filteredList.Skip(i*20).Take(20).ToList()));
}

“加19,除以20”技巧提供了一种惯用的方式来取整数除法的“上限”,而不是“地板”.

编辑:更好(感谢Thomas Ayoub)

var allResponses= new List<string>();
for (int i = 0 ; i < filteredList.Count ; i = i + 20) {
    allResponses.Add(GetResponse(filteredList.Skip(i).Take(20).ToList()));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读