2016-11-16 185 views
0

我有一個項目列表可以有多個標準分配給它。它們可以是紅色,藍色,綠色或紅色和藍色,藍色和綠色,紅色和綠色或紅色和藍色和綠色。如何從一個列表中創建多個列表?

我想在運行時能夠做的是創建三個列表。

我開始與一類我可以填寫

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

上榜

public List<Item> itemList; 

我不知道如何使一個瀕危,blueList和greenList。

我對此很迷茫。我覺得我需要通過第一個列表進行循環。然後檢查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]); 
     } 
    } 

在年底blueListredListgreenList將所有與bluered和​​屬性設置爲true的項目。因爲元素可以有多種顏色設置爲true,所以會有重疊。

+0

謝謝!這更有意義。 –

2

這可能不會回答這個問題,但它可以幫助某人到達這裏(甚至你)。

你應該想想標誌:

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

那麼你就AMN編輯腳本允許多選在檢查:

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

請注意&不是& &。這是執行一些位操作。然後,您的對象可以在if語句中運行0,1,2或全部路徑。