|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2010
Сообщений: 13
|
Отсортировать элементы двухмерного массива находящиеся на одной диагонали
Есть двухмерный массив n x m строк вида:
0 | 5 | 10 | 15 1 | 6 | 11 | 16 2 | 7 | 12 | 17 3 | 8 | 13 | 18 4 | 9 | 14 | 19 Нужно преобразовать в массив содержащий список элементов, которые находятся на одной диагонали, например: [0], [1, 5], [2, 6, 10], [3, 7, 11, 15], [4, 8, 12, 16], [9, 13, 17], [14, 18], [9]. Подскажите, пожалуйста, как такое можно сделать или где можно посмотреть, решение. |
|
|||||
Общее кол-во диагоналей = num = (n + m - 1)
Самая длинная диагональ = max = (n <= m) ? n : m; var num:uint = (n + m - 1); var max:uint = (n <= m) ? n : m; var diagArr:Array = []; for(var k:uint = 0;k<num;k++) { var retArr:Array = []; var x:uint = (k > m) ? (k - m - 1) : 0; var y:uint = (k <= n) ? k : n; var l:uint = (k < max) ? k : 2*max - k; for(var i:uint = 0;i<l;i++) { retArr.push(sourceArr[x+i][y+i]); } diagArr.push(retArr); }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Jul 2010
Сообщений: 13
|
Спасибо за отклик. Но все равно что то не получется, может я что не так делаю. Вот попробовал вывести trace
var n:int = 4; var m:int = 5; var sourceArr:Array = []; var index:int; trace ("sourceArray"); for (var ii:int = 0; ii < n; ii++) { sourceArr[ii] = []; for (var jj:int = 0; jj < m; jj++) { sourceArr[ii][jj] = index; index++; } trace (sourceArr[ii]); } var num:uint = (n + m - 1); var max:uint = (n <= m) ? n : m; var diagArr:Array = []; for(var k:uint = 0;k<num;k++) { var retArr:Array = []; var x:uint = (k > m) ? (k - m - 1) : 0; var y:uint = (k <= n) ? k : n; var l:uint = (k < max) ? k : 2*max - k; for(var i:uint = 0;i<l;i++) { retArr.push(sourceArr[x+i][y+i]); } diagArr.push(retArr); } trace("\n\rresult\n-------------------------------------\n"+diagArr); |
|
|||||
Это был набросок логики, ну если уж на то пошло, вот :
var num:uint = (n + m - 1); var max:uint = (n <= m) ? n : m; var diagArr:Array = []; for(var k:uint = 0;k<num;k++) { var retArr:Array = []; var x:uint = (k >= (m - 1)) ? (k - (m - 1) + 1) : 0; var y:uint = (k <= (n - 1)) ? k : (n - 1); var l:uint = (k < max) ? (k + 1) : 2*max - k; for(var i:uint = 0;i<l;i++) { retArr.push(sourceArr[y-i][x+i]); } diagArr.push(retArr); }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Jul 2010
Сообщений: 13
|
Большое спасибо, за помощь.
|
Часовой пояс GMT +4, время: 07:39. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|