如何循环比循环更大的List?

问题描述 投票:0回答:1
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class DoorsLockManager : MonoBehaviour
{
    [System.Serializable]
    public class DoorClass
    {
        public HoriDoorManager Door;
        public bool doorState;
        public Transform[] DoorShieldFXLocked;
    }

    public bool allDoors = false;
    public DoorClass[] doorclass;

    private List<HoriDoorManager> Doors = new List<HoriDoorManager>();
    private Renderer rend;
    private Shader unlitcolor;
    private List<GameObject> DoorShieldFXLocked = new List<GameObject>();

    private void Start()
    {
        DoorShieldFXLocked = GameObject.FindGameObjectsWithTag("DoorShield").ToList();
        unlitcolor = Shader.Find("Unlit/ShieldFX");

        var doors = GameObject.FindGameObjectsWithTag("Door");
        doorclass = new DoorClass[doors.Length];

        for (int i = 0; i < doors.Length; i++)
        {
            Doors.Add(doors[i].GetComponent<HoriDoorManager>());
            LockDoorState(i, allDoors);
            doorclass[i] = new DoorClass();
            doorclass[i].Door = Doors[i];
            doorclass[i].doorState = allDoors;
        }
    }

我怎样才能遍历doorClass以及DoorShieldFXLocked。每个doorClass都有两个DoorShieldFXLocked项目。

例如:

doorClass1
    DoorShieldFXLocked
    DoorShieldFXLocked

doorClass2
    DoorShieldFXLocked
    DoorShieldFXLocked

在开始我需要为每个doorClass分配两个DoorShieldFXLocked到DoorShieldFXLocked Transform数组。

doorClass的大小为13(索引0到12),DoorShieldFXLocked列表大小为24(索引0到23)。

c# unity3d
1个回答
4
投票

如果我们假设以下内容,则不需要遍历DoorShieldFXLocked数组;简单的数学运作:

doorClass[0],你需要使用DoorShieldFXLocked[0]DoorShieldFXLocked[1]

doorClass[1],你需要使用DoorShieldFXLocked[2]DoorShieldFXLocked[3]。等等

在这种情况下,你可以看到每对DoorShieldFXLocked指数是2*i(2*i)+1

但是,如果您需要找到两个特定的门,则需要使用嵌套循环。

for (int i = 0; i < doors.Length; i++)
{
    ...
    for (int j=0; j< DoorShieldFXLocked.Length; ++j)
    {
       //test and Add if needed
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.