【问题标题】:Copy Parts of a list to another list将列表的一部分复制到另一个列表
【发布时间】:2016-10-26 15:30:14
【问题描述】:

我目前正在尝试将一个列表的部分复制到另一个列表,但我遇到了困难。

我对使用列表很陌生。

我已经创建了一个构造函数。

然后我创建了一个列表,其中包含我需要的所有项目。 我想将我的第一个列表中的一个随机片段复制到我的第二个列表中。 然后我想删除我从原始列表中复制的部分。

这是我拥有的当前代码。

我的构造函数代码

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。

我一直在上网,我现在有点迷茫。

如何从字符列表中仅复制一个部分然后将其删除?

【问题讨论】:

  • 您对应复制列表的哪个部分的标准是什么?应该复制多少项目?它们可以是顺序的,还是需要随机选择?复制/删除部分很简单,但是您没有提供足够的细节来说明您希望如何实现它。

标签: c# list unity3d


【解决方案1】:

如果我理解您的要求,此代码将根据 Character.Weapon 值将单个 Character 复制到 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,这在处理列表时非常方便。我一直在用它。

【讨论】:

    【解决方案2】:

    首先感谢您的回答。他们没有给我直接的答案,但他们确实引导我走上了正确的道路,这使我得到了答案。这正是我所需要的。

    我还学会了更清晰地使用我的代码和 cmets。

    这是我为实现我想要的而编写的代码。

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

    【讨论】:

      【解决方案3】:

      一种方法是在您的Character_Setup 类中拥有一个Team 属性,然后您可以通过该属性选择谁进入哪个列表。应该有一个枚举支持它..但是要开始添加public int Team = 0,然后在构造函数中允许为“蓝队”分配Team = 1,为“红队”分配Team = 2(团队0是“无团队”,是否支持,取决于您,如果不只允许 1 和 2,而不是 0、1、2)。

      那你就可以了,Blue_Team.AddRange(Characters.Where(c =&gt; 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);
          }    
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 2017-11-02
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多