我有一个我想迭代的ArrayList.迭代它时,我必须同时删除元素.显然这会抛出一个java.util.ConcurrentModificationException.
处理此问题的最佳做法是什么?我应该先克隆列表吗?
我删除不在循环本身但是代码的另一部分的元素.
我的代码看起来像这样:
public class Test() {
private ArrayList<A> abc = new ArrayList<A>();
public void doStuff() {
for (A a : abc)
a.doSomething();
}
public void removeA(A a) {
abc.remove(a);
}
}
Run Code Online (Sandbox Code Playgroud)
a.doSomething可能打电话Test.removeA();
是否有"For each"操作的Linq样式语法?
例如,将基于一个集合的值添加到另一个集合,已存在的集合:
IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };
IList<int> list = new List<int>();
someValues.ForEach(x => list.Add(x + 1));
Run Code Online (Sandbox Code Playgroud)
代替
foreach(int value in someValues)
{
list.Add(value + 1);
}
Run Code Online (Sandbox Code Playgroud) 使用C++ 11基于范围的正确方法是for什么?
应该使用什么语法?for (auto elem : container),for (auto& elem : container)或者for (const auto& elem : container)?还是其他一些?
所以我想迭代字符串中的每个字符.
所以我认为:
for (char c : "xyz")
Run Code Online (Sandbox Code Playgroud)
但是我收到编译错误:
MyClass.java:20: foreach not applicable to expression type
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
注意:我知道这个Iterator#remove()方法.
在下面的代码示例中,我不明白为什么List.removein main方法抛出ConcurrentModificationException,而不是在remove方法中.
public class RemoveListElementDemo {
private static final List<Integer> integerList;
static {
integerList = new ArrayList<Integer>();
integerList.add(1);
integerList.add(2);
integerList.add(3);
}
public static void remove(Integer toRemove) {
for(Integer integer : integerList) {
if(integer.equals(toRemove)) {
integerList.remove(integer);
}
}
}
public static void main(String... args) {
remove(Integer.valueOf(2));
Integer toRemove = Integer.valueOf(3);
for(Integer integer : integerList) {
if(integer.equals(toRemove)) {
integerList.remove(integer);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 为什么我的for-each循环不会迭代我的JavaScript关联数组对象?
// defining an array
var array = [];
// assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";
// expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
Run Code Online (Sandbox Code Playgroud)
编辑:jQuery each()可能会有所帮助:https://api.jquery.com/jQuery.each/
如何进入Javascript Array.forEach()循环的下一次迭代?
例如:
var myArr = [1, 2, 3, 4];
myArr.forEach(function(elem){
if (elem === 3) {
// Go to "next" iteration. Or "continue" to next iteration...
}
console.log(elem);
});
Run Code Online (Sandbox Code Playgroud)
我真的很惊讶这不是一个问题 - 所以搜索没有任何结果,与建议的答案一样.MDN文档只提到完全打破循环,而不是转向下一次迭代.
std::for_each过for循环有什么优点吗?对我来说,std::for_each似乎只是阻碍了代码的可读性.为什么有些编码标准推荐使用?
我在一个名为data的变量中返回了以下JSON.
这是回归的JSON ......
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
Run Code Online (Sandbox Code Playgroud)
我试图使用$ .each遍历集合,但我遇到的问题是警报显示未定义.我尝试了很多不同的语法,但似乎无法解决这个问题.
我正在使用的JQuery是
$.each(data, function(i, item) {
alert(item.PageName);
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向吗?
编辑 这是我用来获取数据的代码
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
Run Code Online (Sandbox Code Playgroud)
这是在回叫时调用的函数
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
Run Code Online (Sandbox Code Playgroud)
编辑2 这有点令我困惑,根据它应该工作的文档,但它没有.根据提琴手的标题显示: -
Content-Type: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
并且JSON在上面完全正确.如果这有任何不同,我正在使用chrome.将在IE和FF中测试....
编辑3
使用$ .get生成
"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": …Run Code Online (Sandbox Code Playgroud) 我正在深入研究Python,我对foreach迭代有疑问.我是Python的新手,我在C#方面有一些经验.所以我想知道,如果我的集合中的所有项目都有Python中的等效函数用于迭代,例如
pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
或类似的东西.