给定以下代码,使用两种替代方法来迭代它,
这两种方法之间是否有任何性能差异?
Map<String, Integer> map = new HashMap<String, Integer>();
//populate map
//alt. #1
for (String key : map.keySet())
{
Integer value = map.get(key);
//use key and value
}
//alt. #2
for (Map.Entry<String, Integer> entry : map.entrySet())
{
String key = entry.getKey();
Integer value = entry.getValue();
//use key and value
}
Run Code Online (Sandbox Code Playgroud)
我倾向于认为这alt. #2是迭代整个过程的更有效方法map(但我可能是错的)
我有以下标记包含10个pre元素与类indent:
?<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>?
Run Code Online (Sandbox Code Playgroud)
我正在使用以下jQuery .each()函数来遍历每个元素:
?$(function(){
$.each(".indent", function(index){
alert(index);
});
});?
Run Code Online (Sandbox Code Playgroud)
我希望看到10个警报,但我只看到7个
但是,这可以按预期工作$(".indent").each():
$(function(){
$(".indent").each(function(index){
alert(index);
});
});?
Run Code Online (Sandbox Code Playgroud)
看一下$.each()文档,我理解是有区别的:
$ .each()函数与$(selector).each()不同,后者用于独占于jQuery对象进行迭代.
但我不明白为什么在这种情况下,它不会遍历所有元素.
为什么会这样?
我想将一个匿名对象作为方法的参数,然后迭代其属性以将每个属性/值添加到动态ExpandoObject.
所以我需要的是去
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
Run Code Online (Sandbox Code Playgroud)
了解每个属性的名称和值,并能够将它们添加到ExpandoObject.
我该如何做到这一点?
旁注:这将在我的许多单元测试中完成(我用它来重构设置中的大量垃圾),因此性能在某种程度上是相关的.我不太了解反思,肯定地说,但从我所知道的那里,它的性能非常重,所以如果有可能我宁愿避免它......
后续问题:
正如我所说,我将这个匿名对象作为方法的参数.我应该在方法的签名中使用什么数据类型?如果我使用,object是否所有房产都可用?
我有两个枚举:IEnumerable<A> list1和IEnumerable<B> list2.我想同时迭代它们,如:
foreach((a, b) in (list1, list2))
{
// use a and b
}
Run Code Online (Sandbox Code Playgroud)
如果它们不包含相同数量的元素,则应抛出异常.
做这个的最好方式是什么?
我试过了
list1 = [{"username": "abhi", "pass": 2087}]
return render_template("file_output.html", list1=list1)
Run Code Online (Sandbox Code Playgroud)
在模板中
<table border=2>
<tr>
<td>
Key
</td>
<td>
Value
</td>
</tr>
{% for dictionary in list1 %}
{% for key in dictionary %}
<tr>
<td>
<h3>{{ key }}</h3>
</td>
<td>
<h3>{{ dictionary[key] }}</h3>
</td>
</tr>
{% endfor %}
{% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)
上面的代码将每个元素分成多个
核心价值 [
{
"
ü
小号
e ...
我在一个简单的python脚本中测试了上面的嵌套循环,它工作正常,但不是在jinja模板中.
可能重复:
如何在MATLAB中迭代n维矩阵中的每个元素?
我有一个列向量list,我想迭代这样:
for elm in list
//do something with elm
Run Code Online (Sandbox Code Playgroud)
怎么样?
有没有一种优雅的方法可以跳过Java5 foreach循环中的第一次迭代?
示例伪代码:
for ( Car car : cars ) {
//skip if first, do work for rest
.
.
}
Run Code Online (Sandbox Code Playgroud) 我想迭代列表中的所有内容,除了前几个元素,例如:
for line in lines[2:]:
foo(line)
Run Code Online (Sandbox Code Playgroud)
这是简洁的,但复制整个列表,这是不必要的.我可以:
del lines[0:2]
for line in lines:
foo(line)
Run Code Online (Sandbox Code Playgroud)
但这会修改列表,这并不总是好的.
我可以做这个:
for i in xrange(2, len(lines)):
line = lines[i]
foo(line)
Run Code Online (Sandbox Code Playgroud)
但是,这只是粗略的.
更好的可能是这个:
for i,line in enumerate(lines):
if i < 2: continue
foo(line)
Run Code Online (Sandbox Code Playgroud)
但它并不像第一个例子那么明显.
那么:这样做的方法与第一个例子一样明显,但不会不必要地复制列表?
我知道在迭代列表时不允许删除元素,但允许在迭代时将元素添加到python列表中.这是一个例子:
for a in myarr:
if somecond(a):
myarr.append(newObj())
Run Code Online (Sandbox Code Playgroud)
我在我的代码中尝试了这个并且似乎工作正常,但是我不知道是不是因为我很幸运并且它将来会在某个时候破坏?
编辑:我不喜欢复制列表,因为"myarr"很大,因此它太慢了.另外,我需要用"somecond()"检查附加的对象.
编辑:在某些时候"somecond(a)"将是假的,因此不会有无限循环.
编辑:有人问过"somecond()"函数.myarr中的每个对象都有一个大小,每次"somecond(a)"为真,并且一个新对象被附加到列表中,新对象的大小将小于a."somecond()"有一个关于小物体如何的epsilon,如果它们太小,它将返回"false"
我有一个问题要理解迭代文件,在这里我继续我在解释器上输入的内容和结果:
>>> f = open('baby1990.html', 'rU')
>>> for line in f.readlines():
... print(line)
...
# ... all the lines from the file appear here ...
Run Code Online (Sandbox Code Playgroud)
当我再次尝试迭代同一个打开的文件时,我什么也没得到!
>>> for line in f.readlines():
... print(line)
...
>>>
Run Code Online (Sandbox Code Playgroud)
根本没有输出,为了解决这个问题,我要关闭()文件,然后再打开它进行阅读!! 这是正常的行为吗?
iteration ×10
python ×4
c# ×2
java ×2
dictionary ×1
file ×1
flask ×1
foreach ×1
hashmap ×1
ienumerable ×1
javascript ×1
jinja2 ×1
jquery ×1
list ×1
map ×1
matlab ×1
performance ×1
properties ×1
skip ×1