Задать вопрос
Zefirot
@Zefirot

Как обрабатывать только занятые элементы массива?

вот у меня есть массив с объектами такого типа
public class ClassTest {
    private GameObject o; public GameObject Obj{ get{ return o; } set{ o = value; }}
   ......
    }
private ClassTest ArrayTest = new ClassTest [100];
.....
for(byte i = 0; i < ArrayTest .Length; ++i){ 
  if(i == 4 || i == 56) ArrayTest [i] = new ClassTest { Obj = SomeObj .... };
    else ArrayTest [i] = null;
  }
.....
for(byte i = 0; i < ArrayTest .Length; ++i){
  if(ArrayTest [i] != null){ ....

как видите чтобы потом обработать мне нужные объекты то есть те которые не null мне нужно прогонять весь массив, нельзя ли это как-то попроще сделать?
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой 11 комментариев
Решения вопроса 3
freeExec
@freeExec
Участник OpenStreetMap
Никак не убрать, можно только спрятать с глаз долой (использовать Linq).
Ответ написан
Комментировать
@NIKROTOS
Начинающий программист.
Сколько у тебя там объектов? Можешь использовать кодирование чисел двоичным кодом. Число будет считаться состоянием массива. Если объект знает свою позицию в массиве, то при его удалении, можно перевести прошлое число(состояние) в двоичный код, поменять нужную 1 на 0 и обратно преобразовать в число. Поменять можно сложением или вычитанием, но нужно быть уверенным, что все изменения производятся через отдельный класс, свойства должны быть защищены и меняться через методы.
Ответ написан
abberdeen
@abberdeen
Некромантия: Почему бы не сохранить индексы не нулевых элементов массива?

var itemsCount = 100;

// Исходный массив.
var ArrayTest = new string[itemsCount];

// Количество не нулевых элементов.
var counter = 0;

// Для хранения индексов не нулевых элементов.
var ArrayTestIndex = new int[itemsCount];

for (byte i = 0; i < ArrayTest.Length; ++i)
{
    if (i == 4 || i == 56)  // Очень сложное условие.
    {
        ArrayTest[i] = $"Это не нулевой объект #{i}";

        // Считаем количество не нулевых элементов.
        counter++;

        // Сохраняем индекс текущего элемента.
        ArrayTestIndex[counter - 1] = i;
    }
    else
    {
        ArrayTest[i] = null; 
    }
}

// Отрезаем пустые элементы в реестре индексов.
Array.Resize(ref ArrayTestIndex, counter);

for (byte i = 0; i < ArrayTestIndex.Length; ++i)
{
    // Индекс не нулевого элемента исходного массива.
    var index = ArrayTestIndex[i];

    // Делаем что хотим.
    Console.WriteLine(ArrayTest[index]);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы