2011-06-19 42 views
0

對上一個問題抱歉,但我很困惑,並強調:S。在另一種語言中創建相同的功能

我中的R此功能:

shift <- function(d, k) rbind(tail(d,k), head(d,-k), deparse.level = 0) 

並將該數據幀:

A B value 
1 1 0.123 
2 1 0.213 
3 1 0.543 
1 2 0.313 
2 2 0.123 
3 2 0.412 

這個函數將改變這個數據幀(如果K = 1):

A B value 
3 2 0.412 
1 1 0.123 
2 1 0.213 
3 1 0.543 
1 2 0.313 
2 2 0.123 

代碼:

string[] data = File.ReadAllLines("test.txt"); 
decimal[,] numbers = new decimal[data.Length, 3]; 

for(int x = 0; x < data.Length; x++) 
{ 
    string[] temp = data[x].Split(' '); 

    for(int y = 1; y < temp.Length; y++) 
    { 
     numbers[x,y] = Convert.ToDecimal(temp[y]); 
    } 
} 

這就是我用來從文本文件中獲取值的代碼,但是我想創建將旋轉此表的函數。

我想爲Java或C#中的文本文件製作相同的函數。

這是怎麼做到的?

我存儲在一個二維數組在C#中的數據:decimal[,]

UPDATE:

的功能將旋轉他們像以前的例子,我想做的事是這樣的:

我有這個表:

A B value 
    1 1 0.123 
    2 1 0.213 
    3 1 0.543 
    1 2 0.313 
    2 2 0.123 
    3 2 0.412 

我希望它成爲(在移位的情況下,通過2):

A B value 
3 1 0.543 
1 2 0.313 
2 2 0.123 
3 2 0.412 
1 1 0.123 
2 1 0.213 
+0

您在C#或Java中使用什麼數據結構來表示數據?該操作似乎將最後一行移動到第一行,並將每隔一行向下移動1。是嗎? –

+0

@David Heffernan:我使用普通表從文本文件中讀取數據:string [] data = File.ReadAllLines(「test.txt」);將值拆分爲'',然後使用:numbers [x,y] = Convert.ToDecimal(temp [y])將其轉換爲十進制數組;在for循環中 – smack

+0

我可以建議你發佈一些代碼,這樣我們可以看到有什麼問題嗎? –

回答

3

我認爲這會做你想要什麼,但我必須承認,我沒那麼熟悉C#所以我希望那裏成爲一個更地道形式用更少的循環:

static decimal[,] Rotate(decimal[,] input, int k) 
    { 
     int m = input.GetLength(0); 
     int n = input.GetLength(1); 
     decimal[,] result = new decimal[m, n]; 
     for (int i=0; i<m; i++) 
     { 
      int p = (i + k) % m; 
      if (p < 0) 
       p += m; 
      for (int j=0; j<n; j++) 
       result[p, j] = input[i, j]; 
     return result; 
    } 

關於您的更新,通過傳遞負值k來處理。例如通過k=-2

+0

@David Heffernan:嗨,第一次看和嘗試表明,它給了所需的結果,謝謝,但我必須做進一步的測試,以確保它會這樣做,謝謝 – smack

+0

@smack很好,我甚至沒有運行它,所以很高興知道我的心智電腦工作! –

+1

有趣的是,當索引從零開始時,如何使用模量更容易。 –

相關問題