如何遍历比循环大的列表?

时间:2019-03-16 00:30:00

标签: c# unity3d

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转换数组。

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

1 个答案:

答案 0 :(得分: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
    }
}