Как добавить несколько элементов в список одновременно или с помощью цикла? - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь добавить непостоянное значение элементов, либо циклически повторяя x раз, либо просто добавляя x nr элементов напрямую.

Я пробовал циклически повторять количество раз x и добавлять элементкаждая итерация, но она заканчивается только одним элементом.Я также пытался добавить коллекцию, но тот же результат был получен.

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;



public class tileMapDepth 
{
    public List<bool> tileMapWidth;

    public tileMapDepth(List<bool> realWidth)
    {
        this.tileMapWidth = realWidth;
    }
}

public class TestListTypeAndSuch : MonoBehaviour
{

    public List<tileMapDepth> tileMap = new List<tileMapDepth>(1);
    public int width = 5;
    public int depth = 5;

    void Start()
    {
        for (int i = 0; i < depth; i++)
        {
            tileMap.Add(new tileMapDepth(new List<bool>(new List<bool>(width))));
            foreach (tileMapDepth tile in tileMap)
            {
                for (int j = 0; j < width; j++)
                {
                    tile.tileMapWidth.Add(false);
                }
            }
        }
    }
}

Ожидаемый результат - добавить nr элементов в список, а не только один элемент.Когда я пытаюсь добавить логическое значение с постоянным значением в качестве суммы, она работает нормально.Но мне нужно добавить его с динамической переменной.Код ниже - единственный, который работает.

        for (int i = 0; i < depth; i++)
        {
            tileMap.Add(new tileMapDepth(new List<bool>(new List<bool>(new bool[13]))));
        }

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Try

List<T>.AddRange(IEnumerable<T>) Method

Добавляет элементы указанной коллекции в конец списка.

0 голосов
/ 27 июня 2019

Вы пытаетесь добавить значение false в список 5 раз, т.е. в tileMapWidth.Чтобы добавить одно и то же значение n раз в список, вы можете использовать Enumerable.Repeat()

List<bool> tileMapWidth = Enumerable.Repeat(false, 5).ToList();

Этот список вы можете передать в качестве параметра tileMapDepth() class

что-то вроде

tileMap.Add(new tileMapDepth(tileMapWidth));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...