2016-10-26 4 views
1

現在、あるリストのセクションを別のリストにコピーしようとしていますが、苦労しています。リストの一部を別のリストにコピー

非常に新しいリストを使用しています。

私はコンストラクタを作成しました。

次に、私が必要とするすべてのアイテムを含むリストを作成しました。 最初のリストから2番目のリストにランダムな部分をコピーします。 元のリストからコピーした部分を削除します。

これは現在のコードです。

私のコンストラクタコード

using UnityEngine; 
using System.Collections; 

public class Character_Setup { 

    // Declare Attributes 
    public int Agility = 1; 
    public int Stamina = 1; 
    public int Strength = 1; 
    public int Critical_Hit = 1; 
    public string Weapon =""; 


    // Declare Stats 
    public int Speed = 1; 
    public int Health= 2; 
    public int Damage = 3; 
    public int Acuity = 4; 

    public Character_Setup(string _name) 
    { 
     Weapon = _name; 
     Speed = Agility * Random.Range (1,10); 
     Health = Stamina * Random.Range (1,10); 
     Damage = Strength * Random.Range (1,10); 
     Critical_Hit = Acuity * Random.Range (1,10); 

    } 

} 

これは、別のグループからコピーするコードで私の現在の試みです。

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class Game_Play : MonoBehaviour { 

    public int Num_Players = 11; 
    public int Players = 1; 




    // Use this for initialization 
    void Start() { 

     //Create a list 
     // Using Character_Setup 
     //add 10 characters to list 

     List <Character_Setup> Characters = new List<Character_Setup>(); 

     Characters.Add (new Character_Setup ("Flamethrower")); 
     Characters.Add (new Character_Setup ("Shotgun")); 
     Characters.Add (new Character_Setup ("Rifle")); 
     Characters.Add (new Character_Setup ("Pistol")); 
     Characters.Add (new Character_Setup ("Machine Gun")); 
     Characters.Add (new Character_Setup ("Grenade Launcher")); 
     Characters.Add (new Character_Setup ("Knife")); 
     Characters.Add (new Character_Setup ("Rocket Launcher")); 
     Characters.Add (new Character_Setup ("Throwing Star")); 
     Characters.Add (new Character_Setup ("Sling Shot")); 



     /*foreach (Character_Setup character in Characters) { 
      print (character.Weapon); 
     }*/ 

     // Create 2 teams Off 3 Players 

     // Team 1 
     // Create Blue Team 
     List<Character_Setup> Blue_Team = new List<Character_Setup>(); 
     Blue_Team.AddRange (Characters); 

     foreach (Character_Setup character in Blue_Team) 
     { 
      print (character.Weapon); 
     } 


     // Team 2 
     //Create Red Team 
     //List<Character_Setup> Red_Team = new List<Character_Setup>(); 
     //Red_Team.AddRange (Characters); 

    } 


    // Update is called once per frame 
    void Update() { 

    } 
} 

このコードは現在すべてをコピーします。 Characters内​​で何かを選択してBlue_Teamにコピーしたいと思っています。

私はインターネットを使いましたが、今は少し失われています。

文字リストから1つのセクションのみをコピーして削除するにはどうすればよいですか?

+0

リストのどのセクションをコピーする必要がありますか?いくつのアイテムをコピーする必要がありますか?それらは連続していても、ランダムに選択する必要はありますか?コピー/削除部分は十分にシンプルですが、これをどのように実装したいのかについて十分な詳細を述べていません。 – Serlite

答えて

0

Character_SetupクラスにTeamプロパティを設定する方法もあります。その場合、そのプロパティでどのリストに入るかを選択できます。列挙型の列挙型を使用する必要がありますが、開始するにはpublic int Team = 0を追加し、コンストラクタで「青いチーム」にTeam = 1を割り当て、「赤いチーム」にTeam = 2を割り当てます(チーム0はチームなしです。それをサポートするかどうかは、1と2を許可するだけでなく、0,1,2でない場合)。

次に、Blue_Team.AddRange(Characters.Where(c => c.Team == 1));とすることができます。

LINQせずにそれを行うための別の方法は、このようなものです:

foreach (var charact in Characters) 
{ 
    if (charact.Team == 1) 
    { 
     Blue_Team.Add(charact); 
    } 

    if (charact.Team == 2) 
    { 
     Red_Team.Add(charact); 
    }  
} 
1

私はあなたが求めているものを理解していれば、このコードは、単一のCharacterCharacter.Weapon値に基づいてBlue_Teamにコピーされますが、これは可能あなたが好きなものに変更されました。あなたは、いくつかのオブジェクトを使用する場合は

Character selectedChar = Characters.Where(objChar => objChar.Weapon == "Knife"); 

Blue_Team.Add(selectedChar); 

、あなたの代わりにこのコードでリストを返すことができます:

List<Character> selectedCharList = Characters.Where(objChar => objChar.Weapon == "Knife").ToList(); 

Blue_Team.AddRange(selectedCharList); 

このアプローチはSystem.Linqを使用して、リストを扱うとき非常に便利です。私はいつも使っています。

1

まずはお返事ありがとうございます。彼らは私に直接的な答えを与えてくれませんでしたが、私の答えに私を導いた正しい道で私を導いてくれました。これはまさに私が必要としていたものです。

私は自分のコードとコメントでより明確になることも学びました。

これは私が欲しいものを達成するために書いたコードです。

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class Game_Play : MonoBehaviour { 

    public int Num_Players = 11; 
    public int Players = 1; 




    // Use this for initialization 
    void Start() { 

     //Section 1 
     //Create a list 
     // Using Character_Setup 
     //add 10 characters to list 

     List <Character_Setup> Characters = new List<Character_Setup>(); 

     Characters.Add (new Character_Setup ("Flamethrower")); 
     Characters.Add (new Character_Setup ("Shotgun")); 
     Characters.Add (new Character_Setup ("Rifle")); 
     Characters.Add (new Character_Setup ("Pistol")); 
     Characters.Add (new Character_Setup ("Machine Gun")); 
     Characters.Add (new Character_Setup ("Grenade Launcher")); 
     Characters.Add (new Character_Setup ("Knife")); 
     Characters.Add (new Character_Setup ("Rocket Launcher")); 
     Characters.Add (new Character_Setup ("Throwing Star")); 
     Characters.Add (new Character_Setup ("Sling Shot")); 

     foreach (Character_Setup character in Characters) { 
      print (character.Weapon); 
     } 

     //Section 2 
     // Create 2 teams Off 3 Players 

     // Team 1 
     //Create Blue Team 
     //use loop to fill team 
     //Create Variable to hold selection number 
     //Add to team 
     //Remove from Characters availble 
     List<Character_Setup> Blue_Team = new List<Character_Setup>(); 
     while (Blue_Team.Count < 3) 
     { 
      Character_Setup PlayerSelection = Characters [UnityEngine.Random.Range(0, Characters.Count)]; 
      Blue_Team.Add (PlayerSelection); 
      Characters.Remove(PlayerSelection); 
     } 

     foreach (Character_Setup character in Blue_Team) 
     { 
      print (character.Weapon); 
     } 

     // Team 2 
     //Create Red Team 
     List<Character_Setup> Red_Team = new List<Character_Setup>(); 
     while (Red_Team.Count < 3) 
     { 
      Character_Setup PlayerSelection = Characters [UnityEngine.Random.Range (0, Characters.Count)]; 
      Red_Team.Add (PlayerSelection); 
      Characters.Remove(PlayerSelection); 
     } 

     foreach (Character_Setup character in Red_Team) 
     { 
      print (character.Weapon); 
     } 

    } 
関連する問題