подсчёт определённых элементов массива

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

подсчёт определённых элементов массива

Сообщение NeProUser 23 апр 2019, 09:26

Здравствуйте! недавно столкнулся с проблемой: есть массив bool и требуется постоянно находить количество bool со значением true. попробовал несколько раз не получается (скрипт ниже) счётчик не обнуляется когда это делает i , подскажите что не так?

Синтаксис:
Используется csharp
for(int i = 0; i <sides.Length;i++)
        {
            if (i >=sides.Length)
            {
                activeside = 0;
                i = 0;
            }
            else
            {
                if(sides[i] == true)
                {
                    activeside++;
                }
            }
        }


тот момент что когда i = sides.Length не происходит проверка равно ли sides[i] true так и должно быть
Очередной новичок
Аватара пользователя
NeProUser
UNIт
 
Сообщения: 121
Зарегистрирован: 29 апр 2018, 20:22

Re: подсчёт определённых элементов массива

Сообщение samana 23 апр 2019, 09:34

Вы запустили цикл, который выполняется при условии i < sides.Length, как только i станет равна, или больше sides.Length, то цикл завершится, то-есть тело цикла (всё что ниже в фигурных скобках) уже выполнятся не будет.

Какой смысл считать кол-во true и сразу обнулять счётчик? Может вы хотели так?
Синтаксис:
Используется csharp
activeside = 0;

for(int i = 0; i <sides.Length;i++)
        {
            if(sides[i] == true)
                {
                    activeside++;
                }
        }


Либо объясните, что хотите сделать.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: подсчёт определённых элементов массива

Сообщение NeProUser 23 апр 2019, 09:51

вы правы, лучше объясню

на сцене есть пустой объект из которого в 6 направлениях исходят лучи которые при соприкосновении с каким либо объектом переключают значение определённой bool из массива на true

требуется постоянно высчитывать сколько одновременно bool включено
Очередной новичок
Аватара пользователя
NeProUser
UNIт
 
Сообщения: 121
Зарегистрирован: 29 апр 2018, 20:22

Re: подсчёт определённых элементов массива

Сообщение NeProUser 23 апр 2019, 09:58

ура, всё работает:

Синтаксис:
Используется csharp
for(int i = 0; i < sides.Length;)
        {
            if(i == 0)
            {
               activeside = 0;
            }
            Debug.Log(i);
            if(sides[i] == true)
            {
                activeside++;
            }
            i++;
        }
 
Очередной новичок
Аватара пользователя
NeProUser
UNIт
 
Сообщения: 121
Зарегистрирован: 29 апр 2018, 20:22

Re: подсчёт определённых элементов массива

Сообщение samana 23 апр 2019, 10:05

NeProUser писал(а):ура, всё работает:

Всё верно, вы обнулили счётчик, как и в моём примере. Только делать лишнюю проверку if(i == 0) нет смысла, ведь это условие ВСЕГДА сработает, так как цикл начинается с нуля. Поэтому просто обнулите счётчик перед началом цикла for, тем самым вы избавитесь от лишней проверки условия при каждой итерации.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: подсчёт определённых элементов массива

Сообщение AngryCat 23 апр 2019, 15:50

Синтаксис:
Используется csharp
for(int i = 0; i < sides.Length;i++)
        {
            if(i == 0)
            {
               activeside = 0;
            }
            Debug.Log(i);
            if(sides[i] == true)
            {
                activeside++;
            }
        }

Разницы особо нет, но лучше так)
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: подсчёт определённых элементов массива

Сообщение seaman 24 апр 2019, 11:07

Лучше так:
Синтаксис:
Используется csharp
var activeside = 0;
for(int i = 0; i < sides.Length; i++)
{
    if(sides[i]) activeside++;
}

1. Как писал samana инициализацию переменой вынести за цикл. Вообще - все что можно лучше выносить за цикл.
2. Как писал AngryCat - в for есть возможность выполнять что-то при каждой итерации цикла (в конце его). Самое простое - i++
2. Сравнивать в if с true/false весьма странно. if и так сам уже это делает

А еще лучше что то типа такого:
Синтаксис:
Используется csharp
var activeside = sides.Count(i => sides[i]);
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: подсчёт определённых элементов массива

Сообщение Tolking 24 апр 2019, 11:20

а лучше считать все во время смены значения...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot], Google [Bot], Yandex [Bot] и гости: 27