Знаю единственный способ, как в Jass обойти группу боевых единиц:
do {
    first = FirstOfGroup(units)
    if (first != null) {
        ...
        GroupRemoveUnit(units, first)
    }
} while (first == null)
Этот способ очень неудобен, когда группу нужно сохранить (например, пройти по ней несколько раз. Есть другие способы?

Принятый ответ

вроде был на сайте индексатор для групп
ищи, юзай
накидал простой итератор для груп
пример использования
GroupIterator iterator=GroupIterator.new(units); // создаём итератор для группы units
while (iterator.hasNext()){ // проверяем что ещё есть юниты для перебора
	first = iterator.next(); // извлекаем следующего юнита
	...
}
iterator.delete(); // удаляем итератор
а вот и сам итератор
код
struct GroupIterator{
	private group gr;
	
	static thistype new(group g){
		thistype this=thistype.create();
		gr=CreateGroup();
		bj_groupAddGroupDest = gr;
    	ForGroup(g, function GroupAddGroupEnum);
		return this;
	}
	
	boolean hasNext(){
		return FirstOfGroup(gr)!=null;
	}
	
	unit next(){
		unit u=FirstOfGroup(gr);
		GroupRemoveUnit(gr, u);
		return u;
	}
	
	void delete(){
		DestroyGroup(gr);
		destroy();
	}
}
0
27
6 лет назад
0
иметь две группы. Есть группа, которую нужно обработать. Создаете еще одну. По ходу цикла в одну добавляете юнита (сохраняете), а из другой удаляете (чтобы выполнился цикл).
0
9
6 лет назад
0
Steal nerves:
иметь две группы. Есть группа, которую нужно обработать. Создаете еще одну. По ходу цикла в одну добавляете юнита (сохраняете), а из другой удаляете (чтобы выполнился цикл).
Именно таким способом и делал. Значит, только так?
0
32
6 лет назад
0
А что именно нужно? Исключать всех не тех или отсеять? Можно копировать группу, вставить одну группу в другую, есть соотвествующие функции, размножили одну группу по массиву и перебирайте сколько влезет, после удаляйте.
0
9
6 лет назад
0
quq_CCCP:
А что именно нужно? Исключать всех не тех или отсеять? Можно копировать группу, вставить одну группу в другую, есть соотвествующие функции, размножили одну группу по массиву и перебирайте сколько влезет, после удаляйте.
Именно перебор нужен, как массив.
1
28
6 лет назад
1
вроде был на сайте индексатор для групп
ищи, юзай
накидал простой итератор для груп
пример использования
GroupIterator iterator=GroupIterator.new(units); // создаём итератор для группы units
while (iterator.hasNext()){ // проверяем что ещё есть юниты для перебора
	first = iterator.next(); // извлекаем следующего юнита
	...
}
iterator.delete(); // удаляем итератор
а вот и сам итератор
код
struct GroupIterator{
	private group gr;
	
	static thistype new(group g){
		thistype this=thistype.create();
		gr=CreateGroup();
		bj_groupAddGroupDest = gr;
    	ForGroup(g, function GroupAddGroupEnum);
		return this;
	}
	
	boolean hasNext(){
		return FirstOfGroup(gr)!=null;
	}
	
	unit next(){
		unit u=FirstOfGroup(gr);
		GroupRemoveUnit(gr, u);
		return u;
	}
	
	void delete(){
		DestroyGroup(gr);
		destroy();
	}
}
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.