2011-06-19 45 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

有趣的是,当索引从零开始时,如何使用模量更容易。 –

相关问题