Как сохранить значение одного измерения многомерного массива, проверив первое значение?

#c#

#c#

Вопрос:

В моем коде я создал класс с именем Combatant, затем я создал два экземпляра этого класса с именами «swastik» и «ankit», и все эти экземпляры имеют целое число, называемое «index». Теперь я хочу инициализировать случайную переменную, которая будет возвращать либо 0, либо 1 в качестве значения в соответствии с моим кодом. Затем я хочу проверить, к какому экземпляру принадлежит это значение индекса, это означает, что если значение равно 0, то Консоль вернет swastik.FirstName, а если оно равно 1, то вернет ankit.FirstName.
Большинство из вас, вероятно, скажут, что используют метод if / else, но если бы у меня было, скажем, 1000 экземпляров класса Combatant, должен ли я писать функцию if / else 1000 раз?
Кто-нибудь может предоставить мне менее сложный код для этого.

Мой код:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combat
{
    class Program
    {
        static void Main(string[] args)
        {
            Combatant swastik = new Combatant();
            swastik.CombatantInitialize("Swastik", "Bhattacharyya", 0);

            Combatant ankit = new Combatant();
            ankit.CombatantInitialize("Ankit", "Gupta", 1);

            Random rndIndex = new Random();

            var idxGet = rndIndex.Next(0, 2);

            Object[,] combatants = new Object[,] { { 0, swastik.index }, { 0, 1 } };
            Console.WriteLine(combatants[0,1]);
        }
    }

    class Combatant
    {
        public string firstName;
        public string lastName;
        public string fullName;

        public int index;

        public void CombatantInitialize(string fName, string lName, int ind)
        {
            firstName = fName;
            lastName = lName;
            index = ind;
            fullName = firstName   " "   lastName;
        }
    }
}
  

Комментарии:

1. Почему бы не использовать List<Combatant> и цикл по элементам.

2. Я не очень хорошо разбираюсь в массивах и списках на C #, можете ли вы предоставить мне код для этого в ответах?

Ответ №1:

При создании новых элементов вы можете добавлять их непосредственно в список, попробуйте это

 class Program
{
    List<Combatant> combatList = new List<Combatant>();
    static void Main(string[] args)
    {
        Combatant swastik = new Combatant();
        swastik.CombatantInitialize("Swastik", "Bhattacharyya", 0);
        //add item to list
        combatList.Add(swastik);

        Combatant ankit = new Combatant();
        ankit.CombatantInitialize("Ankit", "Gupta", 1);
        //add item to list
        combatList.Add(ankit);

        Random rndIndex = new Random();

        var idxGet = rndIndex.Next(0, combatList.Count);
        //Output firstname to console
        Console.WriteLine(combatList[idxGet].firstName);
    }
}
  

Комментарии:

1. Просто вопрос, если я вставлю bool в класс isMale и если я захочу проверить его перед инициализацией строки записи, могу ли я использовать if (combatList[idxGet].isMale = True) перед инициализацией строки записи?

2. Конечно, это сработало бы, попробуйте и, если у вас возникнут какие-либо проблемы, свяжитесь со мной.

Ответ №2:

Просто поместите их в массив или список и используйте индекс для доступа к ним.

 List<Combatant> list = new List<Combatant>();
list.Add(swastik);
list.Add(ankit);
  

Поскольку idxGet имеет случайное значение, которое вы хотите, используйте list следующим образом

 array[idxGet]
  

Таким образом, ваш полный код будет

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combat
{
    class Program
    {
        static void Main(string[] args)
        {
            Combatant swastik = new Combatant();
            swastik.CombatantInitialize("Swastik", "Bhattacharyya", 0);

            Combatant ankit = new Combatant();
            ankit.CombatantInitialize("Ankit", "Gupta", 1);

            List<Combatant> list = new List<Combatant>();
            list.Add(swastik);
            list.Add(ankit);

            Random rndIndex = new Random();

            var idxGet = rndIndex.Next(0, list.Count);

            Console.WriteLine( array[idxGet].fullName );
        }
    }

    class Combatant
    {
        public string firstName;
        public string lastName;
        public string fullName;

        public int index;

        public void CombatantInitialize(string fName, string lName, int ind)
        {
            firstName = fName;
            lastName = lName;
            index = ind;
            fullName = firstName   " "   lastName;
        }
    }
}
  

Комментарии:

1. Извините, я не совсем понимаю, что вы пытаетесь здесь сказать. Я действительно новичок, так как мне всего 14. Было бы очень любезно с вашей стороны, если бы вы могли предоставить мне полный код для этого решения.

2. Отредактировано, проверьте это.

3. Извините, мне не нужно проверять ваш код, поскольку я получил ответ, но я уверен, что это тоже работает 🙂

4. Да, я проверил это сейчас, это, безусловно, работает. Подтверждено. Спасибо