【问题标题】:Set list size from another list size or int?从另一个列表大小或 int 设置列表大小?
【发布时间】:2017-06-02 18:28:58
【问题描述】:

我的脚本中有两个列表。

public List<GameObject> l1 = new List<GameObject>();
public List<GameObject> l2= new List<GameObject>();

我想从l1 列表大小设置l2 列表大小。 我已经尝试过list.Capacity,但是当我运行游戏时,Unity 检查器中的列表大小仍然显示为 0 但是当我调试list.Capacity 时,它显示了我的价值。 所以我想从 C# 设置我的列表大小。

【问题讨论】:

  • 不需要微优化。如果您要扩展列表,请让它扩展,如果您想默认它,请选择您认为合理的 const。
  • 你的意思是大小还是容量?因为“设置 .NET 列表的大小”的唯一方法是向列表中添加元素。

标签: c# list unity3d


【解决方案1】:

您必须使用List.CountList 构造函数中设置l2 的容量,并且必须在函数中完成。它从编辑器中获取l1 的大小,并使用它来设置l2 的大小。

改变容量

public List<GameObject> l1 = new List<GameObject>();
public List<GameObject> l2;

void Start()
{
    l2 = new List<GameObject>(l1.Count);
    Debug.Log("Capacity: " + l2.Capacity);
}

也复制值(这将改变编辑器中看到的计数或大小

public List<GameObject> l1 = new List<GameObject>();
public List<GameObject> l2;

void Start()
{
    l2 = new List<GameObject>(l1.Count);
    Debug.Log("Capacity: " + l2.Capacity);

    for (int i = 0; i < l1.Count; i++)
    {
        l2.Add(l1[i]);
    }
    Debug.Log("Count: " + l2.Count);
}

【讨论】:

  • 非常感谢。我试过 'l2 = new List(l1.Count); Debug.Log("容量:" + l2.Capacity);'但不起作用,但我已经解决了复制值的问题。
【解决方案2】:

这里问题的关键在于混淆了列表的容量、数量和大小的含义。设置列表的容量不会影响列表的实际大小。列表的大小为 0,因为列表中没有添加任何内容。列表的大小(即计数)是动态的,如果您不断向列表中添加项目,它将自动增加。这与大小是静态的数组不同。

列表的容量用于优化列表的性能。 IE。如果您知道列表中只有 X 个条目,您可以将容量设置为 X。但是,如果您添加的条目多于 X,则列表将需要重组以处理更多条目。这是自动为您完成的。

如果你想要一个具有静态大小的数据结构,数组会是更好的选择。

【讨论】:

  • 仔细看看这个问题。 OP 想让它们具有相同的 Capacity 而不是 Count
  • 我已经更新了我的答案,希望能澄清误解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2016-10-21
相关资源
最近更新 更多