2017-08-09 98 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的答案)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者作答,而這些人可能不知道您的代碼建議背後的原因。 –