如何从一个列表中创建多个列表?

时间:2016-11-16 02:27:07

标签: list unity3d

我有一个可以分配多个条件的项目列表。它们可以是红色,蓝色,绿色或红色和蓝色,蓝色和绿色,红色和绿色或红色和蓝色和绿色。

我希望能够在运行时创建三个列表。

我开始上课我可以填写

[System.Serializable]
public class Item
{
    public bool red;
    public bool blue;
    public bool green;
}

制作名单

public List<Item> itemList;

我不知道如何制作redList,blueList和greenList。

我很遗憾。我觉得我需要在第一个列表中执行for循环。然后检查bool是否为true,是否将它添加到新列表中。

new List<Item> redList;

for (int i = 0; i < itemList.Count; i++)
    {
      if( red == true)
       {
            redList.Add();
       }
     }

2 个答案:

答案 0 :(得分:2)

你的总体想法是正确的。我假设你有ItemList想要创建三个彩色列表。这是代码。

new List<Item> redList;

for (int i = 0; i < itemList.Count; i++)
    {
      if(itemList[i].red)
       {
            redList.Add(itemList[i]);
       }

     if(itemList[i].blue)
       {
            blueList.Add(itemList[i]);
       }

     if(itemList[i].green)
       {
            greenList.Add(itemList[i]);
       }
    }

最后blueListredListgreenListblueredgreen属性设置为true的所有项。由于元素可以将多种颜色设置为true,因此会有重叠。

答案 1 :(得分:2)

这可能无法回答问题,但它可以帮助有人来到这里(甚至是你)。

你应该考虑Flags:

[System.Serializable]
public class Item
{
    public ColorType colorType;
}
[Flags]
enum ColorType
{
    Red, Blue, Green
}

然后你有编辑脚本允许在检查员中进行多项选择:

[CustomPropertyDrawer(typeof(ColorType))]
public class IMovementControllerDrawer : PropertyDrawer
{
    public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _label)
    {
        _property.intValue = EditorGUI.MaskField(_position, _label, _property.intValue, _property.enumNames);
    }
}

最后,您可以使用colorType实例来检查它是什么:

if ((this.colorType & ColorType.Red) == ColorType.Red) { // It is Red}
if ((this.colorType & ColorType.Green) == ColorType.Green) { // It is Green}
if ((this.colorType & ColorType.Blue) == ColorType.Blue) { // It is Blue}

注意&amp;那不是&amp;&amp;这是执行一些操作。然后,您的对象可以在if语句中运行0,1,2或所有路径。