gpt4 book ai didi

c# - 获取列表中的后续元素 C#

转载 作者:行者123 更新时间:2023-12-02 19:49:53 25 4
gpt4 key购买 nike

我被要求改进一段给定的代码。代码的想法是获取一个对象列表,并使用两个 foreach 循环检查它们是否发生冲突。伪代码编写:

foreach (Entity object in objectList) 
foreach (Entity object2 in objectList)
if (object.collideWith(object2))
Collision(object,object2)

对于每个对象,它都会循环遍历每个对象 - 这是低效的。相反,我应该将其更改为“对于每个对象,循环遍历每个后续对象”。我对 C# 相当陌生,但这就是我在伪中想象解决方案的方式:

foreach (Entity object in objectList) 
if (object.collideWith(subsequent object))
Collision(object, subsequent object)

这样,我只检查一个对象是否与另一个对象碰撞一次。但是如何获得列表中的“后续对象”呢?

最佳答案

您可以通过消除笛卡尔积的“下半部分”(假设碰撞关系是对称的)来改进代码,如下所示,使用 for 循环而不是 foreach 循环。

for ( int i = 0; i < objectList.Count(); i++ )
{
var iObj = objectList[i];
for ( int j = i ; j < objectList.Count(); j++ )
{
var jObj = objectList[j];
if ( iObj.collideWith(jObj) )
{
Collision( iObj, jObj );
}
}
}

这将碰撞检查的数量大致减少了 2 倍。但是,运行时复杂性是相同的,并且该方法很难用 Linq 实现。

关于c# - 获取列表中的后续元素 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com