我正在对对象数组进行非常频繁的迭代,并且一直在使用jQuery.each().但是,我有速度和内存问题,根据我的探查器,最常调用的方法之一是jQuery.each().街上有什么关于它的表现的话?我应该切换到简单的for循环吗?当然,我也在修复我自己的代码中的许多问题.
我能指望它从数组的开头到结尾的顺序吗?在文档中找不到任何关于此的内容.
即是
for (id val in array)
{
NSLog(@"%@", val);
}
Run Code Online (Sandbox Code Playgroud)
总是打印出来的
for (int i = 0; i < [array count]; ++i)
{
NSLog(@"%@", [array objectAtIndex:i]);
}
Run Code Online (Sandbox Code Playgroud) 我需要迭代从结尾到beginnig的向量."正确"的方式是
for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
//do Something
}
Run Code Online (Sandbox Code Playgroud)
当doSomething涉及了解实际索引时,需要使用rit进行一些计算以获得它,就像 index = v.size() - 1 - (rit - v.rbegin)
如果无论如何都需要索引,那么我坚信最好使用该索引进行迭代
for(int i = v.size() - 1; i >= 0; --i)
{
//do something with v[i] and i;
}
Run Code Online (Sandbox Code Playgroud)
这会发出一个i已签名v.size()且未签名的警告.改为
for(unsigned i = v.size() - 1; i >= 0; --i) 在功能上是错误的,因为这实际上是一个无限循环 :)
什么是美学上很好的方式来做我想做的事情
我希望我不是在寻找不存在的东西:)
我有一个像这样的元组列表:
[
('a', 1),
('a', 2),
('a', 3),
('b', 1),
('b', 2),
('c', 1),
]
Run Code Online (Sandbox Code Playgroud)
我想通过第一项来迭代这个键控,所以例如我可以打印这样的东西:
a 1 2 3
b 1 2
c 1
Run Code Online (Sandbox Code Playgroud)
如何在不保持项目跟踪第一项是否与循环元组循环相同的情况下进行此操作?这感觉相当混乱(加上我必须将列表排序开始)...
今天早些时候,我需要一次迭代一个字符串2个字符来解析格式化的字符串"+c-R+D-E"(有一些额外的字母).
我最终得到了这个,但它看起来很难看.我最后评论它正在做什么,因为它感觉不明显.它几乎似乎是pythonic,但并不完全.
# Might not be exact, but you get the idea, use the step
# parameter of range() and slicing to grab 2 chars at a time
s = "+c-R+D-e"
for op, code in (s[i:i+2] for i in range(0, len(s), 2)):
print op, code
Run Code Online (Sandbox Code Playgroud)
有没有更好/更清洁的方法来做到这一点?
我继承了一大堆代码,它们广泛使用并行数组来存储键/值对.实际上这样做是有意义的,但是编写循环遍历这些值有点尴尬.我真的很喜欢新的Java foreach构造,但似乎没有办法使用它来迭代并行列表.
通过正常for循环,我可以轻松完成:
for (int i = 0; i < list1.length; ++i) {
doStuff(list1[i]);
doStuff(list2[i]);
}
Run Code Online (Sandbox Code Playgroud)
但在我看来,这不是语义上的纯粹,因为我们没有检查list2迭代期间的界限.是否有一些类似于for-each的聪明语法可用于并行列表?
假设我有一个无序集
unordered_set<int> my_set;
myset.insert(1);
myset.insert(2);
myset.insert(3);
Run Code Online (Sandbox Code Playgroud)
我如何迭代它?我不需要以任何顺序迭代 - 只要我到达每个元素一次.我试过了
for (int i = 0; i < my_set.size(); i++)
cout << my_set[i];
Run Code Online (Sandbox Code Playgroud)
无济于事.
我的代码如下:
std::cin >> str;
for ( char c : str )
if ( c == 'b' ) vector.push_back(i) //while i is the index of c in str
Run Code Online (Sandbox Code Playgroud)
这可行吗?或者我将不得不与老派进行循环?
我离开了一会儿,试图把老瓜弄脏之后回到c ++.
在Java中,Iterator是具有方法的容器的接口:hasNext(),next()和remove().hasNext()的存在意味着它具有对遍历容器的限制的概念.
//with an Iterator
Iterator<String> iter = trees.iterator();
while (iter.hasNext())
{
System.out.println(iter.next());
}
Run Code Online (Sandbox Code Playgroud)
在C++标准模板库中,迭代器似乎表示支持operator ++和operator ==的数据类型或类,但没有内置限制的概念,因此在前进到下一个项目之前需要进行比较.用户必须检查限制,比较正常情况下的两个迭代器,第二个迭代器是容器端.
vector<int> vec;
vector<int>::iterator iter;
// Add some elements to vector
v.push_back(1);
v.push_back(4);
v.push_back(8);
for(iter= v.begin(); iter != v.end(); iter++)
{
cout << *i << " "; //Should output 1 4 8
}
Run Code Online (Sandbox Code Playgroud)
这里有趣的部分是在C++中,指针是数组的迭代器.STL采用了现有的并围绕它构建惯例.
有什么进一步的细微之处,我失踪了吗?
我想使用Javascript浏览页面上的所有元素,看看它们是否有属性集.有没有一种简单的方法可以做到这一点,还是我必须使用递归解决方案?