2016-11-16 2 views
0

У меня есть список элементов, которые могут иметь несколько критериев, назначаемых ему. Они могут быть красного, синего, зеленого или красного и синего, синего и зеленого, красного и зеленого или красного и синего и зеленого.Как сделать несколько списков из одного списка?

Что я хочу, чтобы во время выполнения было создано три списка.

Я начал с классом я могу заполнить

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

Сделано список

public List<Item> itemList; 

Я не знаю, как сделать Redlist, blueList и greenList.

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

new List<Item> redList; 

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

ответ

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]); 
     } 
    } 

В конце blueList, redList и greenList будет иметь все элементы с blue, red и green свойств, заданных в действительности. Там будут перекрытия, поскольку элементы могут иметь несколько цветов, установленных в true.

+0

Спасибо! Это имеет смысл. –

2

Это может не ответить на вопрос, но может помочь кому-то попасть сюда (или даже вам).

Вы должны думать о Флаги:

[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} 

Обратите внимание на &, что НЕ & &. Это выполняет некоторые манипуляции с битами. Затем ваш объект может запускать 0, 1, 2 или весь путь в операторах if.

Смежные вопросы