【问题标题】:How do you add multiple elements in a list at once or with a loop?如何一次或循环在列表中添加多个元素?
【发布时间】:2019-06-27 09:36:07
【问题描述】:

我正在尝试通过循环 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]))));
        }

【问题讨论】:

  • AddRange to a Collection的可能重复
  • new List&lt;bool&gt;(new List&lt;bool&gt;(...)) 中的第一个列表是多余的。

标签: c# list unity3d


【解决方案1】:

试试

List&lt;T&gt;.AddRange(IEnumerable&lt;T&gt;) Method

将指定集合的​​元素添加到列表的末尾。

【讨论】:

  • 我尝试通过使用这一行而不是“ tile.tileMapWidth.AddRange(new List(width));”来添加多个元素,但出现了相同的结果。
  • 您的new List&lt;bool&gt;(width) 设置了列表的初始容量,但尚未添加任何元素。相反,我会使用(new bool[width]).ToList();
【解决方案2】:

您正在尝试将 false 值添加到列表中 5 次,即在 tileMapWidth 中。要在列表中添加 n 次相同的值,您可以使用 Enumerable.Repeat()

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

您可以将此列表作为参数传递给tileMapDepth()

类似

tileMap.Add(new tileMapDepth(tileMapWidth));

【讨论】:

  • 我尝试了 Enumerable.Repeat,它仍然给了我外部和内部列表中的一个元素。还有你展示的最后一行代码,这是不可能的,因为 tileMapWidth 是 tileMapDepth 类的属性,所以它需要首先引用 tileMapDepth 的实例。这就是为什么它可能会变得棘手。
  • 我添加了创建tileMapWidth 实例的第一行代码
  • 啊,我明白了。我试过了,但是tileMap中只有一个元素,属性列表“tileMapWidth”中只有一个元素。然而“tileMapWidth”的容量是 4,但我希望增加 .Count 而不是 .Capacity 来填充 x 数量的元素。
  • 这里奇怪的是,当我输入一个常量值作为集合的数量时:
  • 需要在for循环中添加
猜你喜欢
  • 2019-07-31
  • 2023-03-12
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2018-02-23
  • 1970-01-01
相关资源
最近更新 更多