Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   замена элементов N'мерного массива N'мерным массивом меньшей размерности... (http://www.flasher.ru/forum/showthread.php?t=146464)

Contemplator 09.11.2010 01:42

замена элементов N'мерного массива N'мерным массивом меньшей размерности...
 
Собственно... алгоритм какой у такого рода манипуляций? хотя б на примере замены части элементов двумерного массива элементами другого двумерного массива меньшей размерности, когда индексы первого элемента, подлежащего замене, известны...
массив A:
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
массив В:
[[0, 0, 0, 0],
[0, 0, 0, 0]]
массив С (А, с заменёнными элементами):
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

HotIceCream 09.11.2010 01:54

тоесть нужно встроить в середину?

тогда примерно так
Код AS3:

for (int i=0; i<b.length; i++)
{
for (int j=0; j<b[i].length; j++)
{
a[i+ (a.length- b.length)/2][j +(a[i].length-b[i].length)/2] = b[i][j];
}
}

причем a[(a.length- b.length)/2][(a[0].length-b[0].length)/2] - это первый элемент подлежащий замене. если он находится где то еще и индексы его известны - то соответственно нужно изменить и предыдущие циклы.

etc 09.11.2010 02:17

splice

f.g.programmer 09.11.2010 10:24

Подставляет значения из b в a, в указанную позицию. Если нужен новый массив, можно вначале скопировать a.

Код AS3:

var a:Array =        
        [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
var b:Array =
        [[0, 0, 0, 0],
        [0, 0, 0, 0]]
var row:int = 1; // строка вставки
var col:int = 3; // столбец вставки
for (var i:int = 0; i < b.length; i++) {
        for (var j:int = 0; j < b[i].length; j++) {
                var i1:int = i + row;
                var j1:int = j + col;
                // проверяем, что есть куда вставлять
                if ( i1 < a.length && j1 < a[i1].length) {
                    a[i1][j1] = b[i][j];
                }
        }
}
trace(a.join("\n"));



Часовой пояс GMT +4, время: 12:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.