Перейти к содержимому


Фотография

Редактирование массива по определенному признаку.


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 19 June 2016 - 20:54

В связи с тем что форумы А2 умерли вынужден спросить здесь.

Че то как то я закопался - нужен свежий взгляд на проблему.

Создаю массив локаций считывая все доступные с карты. И нужна маленькая мелочь: отсеять локации которые близко к другу другу, при этом одну из этих близко расположенных оставить в массиве.

 

PONsNIj.jpg

 

Делал разные варианты отсеивания, но для примера остановлюсь на одном:

_FFA_TARGET_LOCATIONS =[];
_FFA_TARGET_LOCATIONS = nearestLocations[markerpos "m1", ["NameCity", "NameCityCapital", "NameVillage"], 15000]; // создаю массив локаций

_locationmassivegroup = [];
_locationmassive = [];
{
	_locationmassive = [];
	_xx=_x; //испытуемая локация
	{
		_xxx=_x; // локация которая будет проверяться по отношению к испытуемой
		if ((_xx distance _xxx) < 1000 && (_xx distance _xxx) > 0 && {if(_xxx in _x) exitwith {1}} count _locationmassivegroup == 0) then // проверяю на дистанцию и наличие _xxx в конечном массиве _locationmassivegroup во избежание дублирования
		{
			_locationmassive set [count _locationmassive,_xxx]; //создаю субмассив близко расположенных локаций по отношению к испытуемой 
		};
	} foreach _FFA_TARGET_LOCATIONS;
	if ({if(_xx in _x) exitwith {1}} count _locationmassivegroup == 0) then // проверяю наличие испытуемой локации в конечном массиве _locationmassivegroup во избежание дублирования
	{
		_locationmassive set [count _locationmassive,_xx]; // добавляю исптуемую локацию в субмассив близкорасполженных к ней локациям
		if (count (_locationmassive) > 1) then // если субмассив имеет такие близкорасположенные локации
		{
			_yy= _locationmassive select (floor random (count _locationmassive)); // выбираем рандомно одну
			_locationmassivegroup set [count _locationmassivegroup,[_yy]]; // добавляем ее в конечный массив _locationmassivegroup
		}else{
			_locationmassivegroup set [count _locationmassivegroup,_locationmassive]; // если в субмассиве всего только одна испытуемая локация то добавляем ее в конечный массив 
		};
	};

} foreach _FFA_TARGET_LOCATIONS;

// отображаем локации маркерами на карте
{
		if (typeName (_x select 0)== "LOCATION") then
		{
			_m = createMarker["markertown" + (str _forEachIndex),locationPosition (_x select 0)];
			_m setMarkerShape "ICON";
			_m setMarkerType "DOT";
			_m setMarkerText text (_x select 0);
			_m setmarkercolor "Colorgreen";
		};
} foreach _locationmassivegroup;
copytoclipboard str _locationmassivegroup;
hint str count _locationmassivegroup;

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

работает неправильно

если можно то обойтись а2 командами, но впринципе не важно - нужен механизм, там уж сам...


Сообщение отредактировал Dimon UA: 19 June 2016 - 23:32

  • 0

#2 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 20 June 2016 - 00:12

всё! проблему решил - нашел косяк.

if ({if(_xx in _x) exitwith {1}} count _locationmassivegroup == 0) then // проверяю наличие испытуемой локации в конечном массиве _locationmassivegroup во избежание дублирования

конечный массив был неполный ибо я в него добавлял только что мне нужно а не все варианты
 

_yy= _locationmassive select (floor random (count _locationmassive)); // выбираем рандомно одну
			_locationmassivegroup set [count _locationmassivegroup,[_yy]]; // добавляем ее в конечный массив _locationmassivegroup

так будет правильно
 

_FFA_TARGET_LOCATIONS =[];
_FFA_TARGET_LOCATIONS = nearestLocations[markerpos "m1", ["NameCity", "NameCityCapital", "NameVillage"], 15000]; // создаю массив локаций

_locationmassivegroup = [];
_locationmassive = [];
{
	_locationmassive = [];
	_xx=_x; 
	{
		_xxx=_x; 
		if ((_xx distance _xxx) < 1000 && (_xx distance _xxx) > 0 && {if(_xxx in _x) exitwith {1}} count _locationmassivegroup == 0) then 
		{
			_locationmassive set [count _locationmassive,_xxx];
		};
	} foreach _FFA_TARGET_LOCATIONS;
	if ({if(_xx in _x) exitwith {1}} count _locationmassivegroup == 0) then 
	{
		_locationmassive set [count _locationmassive,_xx];
		_locationmassivegroup set [count _locationmassivegroup,_locationmassive]; 
	};

} foreach _FFA_TARGET_LOCATIONS;


{
		if (typeName (_x select 0)== "LOCATION") then
		{
			_m = createMarker["markertown" + (str _forEachIndex),locationPosition (_x select 0)];
			_m setMarkerShape "ICON";
			_m setMarkerType "DOT";
			_m setMarkerText text (_x select 0);
			_m setmarkercolor "Colorgreen";
		};
} foreach _locationmassivegroup;
copytoclipboard str _locationmassivegroup;
hint str count _locationmassivegroup;

PdFgmwS.png


  • 0




Яндекс.Метрика