我需要访问向量中的每个元素,并且还知道元素所在的索引.
到目前为止,我可以提出两种方法
for (iterator it= aVector.begin(), int index= 0; it!= aVector.end(); ++it, ++index)
Run Code Online (Sandbox Code Playgroud)
留下类型签名.它看起来我不能使用汽车
for (int index = 0; index < aVector.size(); ++index)
{
// access using []
}
Run Code Online (Sandbox Code Playgroud)
哪一个更有效率还是有更好的方法来做到这一点?
示例代码:
int a[] = new int[]{0, 1, 2, 3};
int result = 0;
for (int i : a)
result += i;
Run Code Online (Sandbox Code Playgroud)
是循环保证遍历跨越a[0],a[1],a[2],a[3]的顺序?我坚信答案是肯定的,但这个页面似乎并没有明确说明秩序.
有一个坚实的参考?
如何批量处理序列的元素?
例如,使用序列"abcdef"和批量大小为2,我想执行以下操作:
for x, y in "abcdef":
print "%s%s\n" % (x, y)
ab
cd
ef
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,因为它期望列表中的单个元素本身包含2个元素.
什么是一个漂亮,简短,干净,pythonic的方式来处理批处理列表中的下一个n个元素,或者从一个更大的字符串处处理长度为n的子字符串(两个类似的问题)?
函数
f由f(n) = nifn < 3和f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)if 的规则定义n > 3.编写一个f通过递归过程计算的过程.编写一个f通过迭代过程计算的过程.
递归地实现它很简单.但我无法弄清楚如何迭代地做到这一点.我尝试与给出的Fibonacci示例进行比较,但我不知道如何将其用作类比.所以我放弃了(羞辱我)并用Google搜索解释,我发现了这个:
(define (f n)
(if (< n 3)
n
(f-iter 2 1 0 n)))
(define (f-iter a b c count)
(if (< count 3)
a
(f-iter (+ a (* 2 b) (* 3 c))
a
b
(- count 1))))
Run Code Online (Sandbox Code Playgroud)
阅读之后,我理解代码及其工作原理.但我不明白的是从函数的递归定义到此需要的过程.我不明白代码是如何在某个人的头脑中形成的.
你能解释一下解决方案所需的思考过程吗?
我需要将Google Collection ImmutableMap和LinkedHashMap- 不可变映射与定义的迭代顺序组合在一起.似乎ImmutableMap本身实际上已经定义了迭代顺序,至少它的文档说:
基于散列的不可变Map,具有可靠的用户指定迭代顺序.
但是没有更多细节.快速测试表明这可能是真的,但我想确定.
我的问题是:我可以依赖ImmutableMap的迭代顺序吗?如果我这样做ImmutableMap.copyOf(linkedHashMap),它将具有与原始链接哈希映射相同的迭代顺序吗?构建器创建的不可变映射怎么样?一些权威答案的链接会有所帮助,因为谷歌没有找到任何有用的东西.(不,与来源的链接不计算在内).
想知道在foreach循环上获得第一次迭代的好方法是什么.我想在第一次迭代时做一些不同的事情.
在这些情况下,条件是我们的最佳选择吗?
我在实现IEnumerable接口的对象池中有以下代码.
public IEnumerable<T> ActiveNodes
{
get
{
for (int i = 0; i < _pool.Count; i++)
{
if (_pool[i].AvailableInPool)
{
yield return _pool[i];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知(根据这个问题),这将产生垃圾,因为需要收集IEnumerable对象._pool中的所有元素都不会被收集,因为池的目的是保持对所有元素的引用以防止垃圾创建.
任何人都可以建议一种允许迭代_pool以便不生成垃圾的方法吗?
在池上迭代时,池中的所有项都AvailableInPool == true应该迭代.订单无关紧要.
让我们说我有一个清单:
listOfStuff =([a,b], [c,d], [e,f], [f,g])
Run Code Online (Sandbox Code Playgroud)
我想要做的是以类似于以下代码的方式遍历中间2组件:
for item in listOfStuff(range(2,3))
print item
Run Code Online (Sandbox Code Playgroud)
最终结果应该是:
[c,d]
[e,f]
Run Code Online (Sandbox Code Playgroud)
此代码目前不起作用,但我希望您能理解我想要做的事情.
我有一个数组:
[
{
"AssetId": 14462955,
"Name": "Cultural Item",
"Description": "It\u0027s... you know... an item. People love items!!!",
"AbsoluteUrl": "http://www.roblox.com/Cultural-Item-item?id=14462955",
"PriceInRobux": "300",
"PriceInTickets": "",
"Updated": "3 years ago",
"Favorited": "370 times",
"Sales": "55",
"Remaining": "",
"Creator": "ROBLOX",
"CreatorAbsoluteUrl": "http://www.roblox.com/users/1/profile",
"PrivateSales": "3 Private Sellers",
"PriceView": 1,
"BestPrice": "666,666,666",
"ContentRatingTypeID": 0,
"IsServerSideThumbnailLookupInCatalogEnabled": true,
"IsLargeItem": false,
"IsThumbnailFinal": true,
"IsThumbnailUnapproved": false,
"ThumbnailUrl": "http://t3.rbxcdn.com/cfbab57cabc6090d078c5f7af403caaa",
"BcOverlayUrl": null,
"LimitedOverlayUrl": "http://images.rbxcdn.com/793dc1fd7562307165231ca2b960b19a.png",
"DeadlineOverlayUrl": null,
"LimitedAltText": "Limited",
"NewOverlayUrl": null,
"SaleOverlayUrl": null,
"IosOverlayUrl": null,
"XboxOverlayUrl": null,
"IsTransparentBackground": false,
"AssetTypeID": 8,
"CreatorID": 1, …Run Code Online (Sandbox Code Playgroud) 它甚至可能吗?
说你有
private Set<String> names = new LinkedHashSet<String>();
Run Code Online (Sandbox Code Playgroud)
并且Strings是"迈克","约翰","凯伦".
是否有可能在没有迭代的情况下得到"1"以回答"约翰"的索引是什么?
以下工作正常..有了这个问题,我想知道是否有更好的方法
for (String s : names) {
++i;
if (s.equals(someRandomInputString)) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)