首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环遍历列表

使用for循环遍历列表
EN

Stack Overflow用户
提问于 2014-05-04 15:55:05
回答 2查看 152关注 0票数 0

好的,我有一个列表,以及存储结构的位置,我需要从最后到第一个检查它们,以检查结构中的一个变量是否为1。代码如下所示:

代码语言:javascript
复制
for(int i = (checkpoints.Count - 1); i == 0; i--)
{
    if(checkpoints[i].active == 1)
    {
        playerPositionX = checkpoints[i].xPosition;
        playerPositionY = checkpoints[i].yPosition;

        camPositionX = checkpoints[i].xPosition;

        break;
    }
}

这是我使用的结构:

代码语言:javascript
复制
private struct checkpoint
{
    public int xPosition;
    public int yPosition;
    public int active;
}

我需要做的是检查变量active是否是存储在列表中的结构中的== 1。我有大约3-8个结构存储在列表中。我需要从列表中的最后一个结构开始检查,然后按我的方式进行到第一个。

当我尝试调试程序时,它看起来好像不是从最后一个开始的,但它是从i=0开始的。

如果您有修补程序,或者需要更多信息,请留下评论。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-04 15:56:25

您的错误是,如果i等于0,则需要遍历循环,而不是循环。您希望循环循环,直到i大于或等于零为止。

代码语言:javascript
复制
for(int i = (checkpoints.Count - 1); i >= 0; i--)  // your mistake was here
{
    if(checkpoints[i].active == 1)
    {
        playerPositionX = checkpoints[i].xPosition;
        playerPositionY = checkpoints[i].yPosition;

        camPositionX = checkpoints[i].xPosition;

       break;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-05-04 15:57:11

您还可以使用LastOrDefault()函数。但是,这里可能有一个问题,因为我们正在寻找Struct

如果什么都没找到呢?

如果没有发现,LastOrDefault()将返回default(checkpoint)。结构的默认值是结构,其所有值都是默认初始化的。因此,我们必须使用.Cast<checkpoint?>将它们转换为可空。

代码语言:javascript
复制
 var activeCheckPoint = checkpoints
      .Where(x => x.active == 1)
      .Cast<checkpoint?>()
      .LastOrDefault();

或者我们必须在返回对象的活动值为1之后进行第二次检查。

代码语言:javascript
复制
var activeCheckPoint = checkpoints.LastOrDefault(x => x.active == 1);
if(actactiveCheckPoint.active == 1)
{
    // Then it is Ok
}
else
{
     // Nothins was found
}

但是,如果要使用for循环,则必须将i == 0更改为i >= 0

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23458302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档