|
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Поиск в многомерном массиве
Пишу техническую программку для друга. Столкнулся с таким случаем. есть многомерный массив
далее необходимо добавить в этот массив данные типа но перед этим необходимо проверить нет ли уже подобных данных в массиве и если нет то тогда добавлять. Пробовал indexOf но он пропускает и данные добавляются. в общем нужно найти выход из сложившейся ситуации по проще чтобы не городить парсер, ну или если без него никак то дайте знать. Надеюсь задача ясна. чтобы отсечь неуместные ответы, подведу итог. Как проверить наличие в многомерном массиве |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
этого я и боялся. а что если в моем случае только два параметра и обернуть их не в массив а в точку
if (mss.indexOf(new Point(num1, num2)) < 0) { mss[mss.length] = new Point(num1, num2); }else { trace('ошибка: уже есть'); } |
|
|||||
Насколько мне известно - экземпляры классов проверяются по ссылкам, поэтому new Point(1, 0) != new Point(1, 0) - true;
А вот String, int, Number примитивы проверяются по содержанию, да.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
сам спросил -> сам отвечаю. Не идет. Неужели только через цикл проверять?
|
|
|||||
Ну, это не должно вас пугать, indexOf в недрах тоже циклом проходится по элементам и сравнивает с каждым, только делает это чуть быстрее штатных средств AS3.
__________________
There is no thing in this world that is not simple. |
|
|||||
Если у вас массив с точками, то найти одинаковую точку в таком массиве не сложно
public function Main() { //добавили точки в массив arr.push(new Point(0,1)); arr.push(new Point(1,2)); arr.push(new Point(3,4)); //попытаться добавить новую точку, если нет похожей trace(addIfNotSame(arr, new Point(1,1))); } public function addIfNotSame(array:Array, point:Point):Boolean { for (var i:int = 0; i < array.length; i++) { //.. если хоть одна точка такая же, как и та, что хотим добавить, //то прекращаем поиск и выходим из метода if ((array[i] as Point).equals(point)) return false; } //если одинаковых точек не нашлось, то добавляем точку в массив array.push(point); return true; } Последний раз редактировалось samana; 14.06.2015 в 20:22. Причина: Немного укоротил код |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Пожалуй лучше написать общую функцию для использования где угодно, к тому же бывает нужно только проверить но не добавлять. а мне это как раз предстоит и не один раз.
что ж, всем спасибо. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Создать двумерный массив и записывать туда какая ячейка занята не подойдет?
|
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
к сожалению нет в моем случае новые записи должны дописываться именно в конец и чтобы не повторялись иначе в другом цикле не будет конца. Если конкретнее то флеш будет писать новые линии по координатам которые уже были использованы. и второй момент новые данные появляются при вводе пользователем данных изначально флеш отрисовывает стандартную фигуру для конкретного случая. в общем уже разобрались.
|
Часовой пояс GMT +4, время: 05:32. |
|
« Предыдущая тема | Следующая тема » |
|
|