【发布时间】:2015-05-14 02:16:38
【问题描述】:
从 0 循环到列表末尾(列表或映射)的场景有哪些,从末尾循环到 0 的场景有哪些?这是代码 sn-p 从 0 到 end 遍历列表以过滤掉一些特定的学生姓名。此代码在任何情况下都会引发任何异常吗?从列表末尾迭代到零对这段代码有什么影响吗?
List<Dictionary<string, string>> allStudentsList = allStudentsArray.ToList();
for (int i = 0; i < allStudentsList .Count-1; i++) {
Dictionary<string, string> student= allStudentsList .ElementAt(i);
string studentName;
bool hasValue = studentName.TryGetValue("id", out studentName);
if (hasValue) {
if (studentName.StartsWith("John") {
allStudentsList.RemoveAt(i);
i--;
}
}
}
【问题讨论】:
-
将此作为评论,因为它与您的问题无关,但您应该将 elementat(i) 替换为简单地在列表中建立索引。 ElementAt 是一个 linq 运算符,因此它要么针对列表进行了优化(并且您只添加了一个方法开销)要么它没有特定于列表的路径,然后它会导致巨大的减速,因为它需要每次迭代整个列表直到查找元素的索引。