2017-08-09 36 views
0

比方说,我有索引= 25,我想将它转换为5行7列的2d索引。我怎样才能做到这一点?将一维索引转换为二维索引

var index = 25; 
var row = 5; 
var col = 7; 
var twod_row = (index % row)-1 
var twod_col = (index % col)-1 

你能帮助我弄清楚如何解决这个问题:

到目前为止,我已经想出了?

+3

什么是* 2-d指数*? – Rajesh

+0

你将不得不解释这个问题,为了让人们理解这两个问题之间的映射,甚至提供一个例子列表将会有所帮助。 –

回答

0

对于row,您可以通过使用cols师的整数值,并为col,您可以用cols使用剩余价值。

function getPosition(index, cols) { 
 
    return { 
 
     row: Math.floor(index/cols), 
 
     col: index % cols 
 
    }; 
 
} 
 

 
console.log(getPosition(0, 7)); 
 
console.log(getPosition(1, 7)); 
 
console.log(getPosition(2, 7)); 
 
console.log(getPosition(7, 7)); 
 
console.log(getPosition(25, 7)); 
 
console.log(getPosition(34, 7));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

你解决方案通过索引0,1和34 – Lucas

+1

二维数组索引 – Lucas

0

Y代表二维数组中行的索引,可以通过简单的划分得到。 X代表'元素'应放置在特定行的位置的索引。

我也添加了一个检查,看看输入索引是否超出数组的大小。

const getNewValues = (idx, row = 5, col = 7) => { 
 
    const Y = Math.floor(idx/ col); 
 
    const X = idx % col; 
 
    
 
    if (Y > (row - 1)) { 
 
    return 'Index exceeds array size!'; 
 
    } 
 
    
 
    return { X, Y }; 
 
    
 
} 
 

 
console.log(getNewValues(0)); 
 
console.log(getNewValues(1)); 
 
console.log(getNewValues(25)); 
 
console.log(getNewValues(34)); 
 
console.log(getNewValues(50));

+1

请添加说明。您正在为读者作答,而不仅仅是针对OP – Rajesh

+0

您解决方案是否通过索引0,1和34 – Lucas

+0

虽然此代码片段可能是正确的解决方案,[包括解释](https://meta.stackexchange.com/questions/114762 /解释 - 完全 - %E2%80%8C%E2%80%基于8Bcode的答案)确实有助于提高您的帖子的质量。请记住,您将来会为读者作答,而这些人可能不知道您的代码建议背后的原因。 –