我目前有一种工作方法,可以移动数组中对象的一个属性的值:
public class Group
{
public Position[] Positions { get; private set; }
public void Shift()
{
var last = Positions[Count - 1].Tile;
for( int i = Count - 1 ; i > 0 ; i-- )
{
// Note this shifts Tile value and not the array itself
Positions[i].Tile = Positions[i - 1].Tile;
}
Positions[0].Tile = last;
}
}
public class Position
{
// [other properties]
public Tile Tile { get; set; }
}
问题在于这种方法需要在算法中运行很多,并且是消耗最多CPU时间的方法。
我正在寻找一种更好的方法来移动这些值,并在以下出色的答案中找到了BlockCopy:https://stackoverflow.com/a/52465132/1554208
但是它用于移动数组本身。有没有一种方法可以复制属性的内容(这里是一个简单的指针)?
我愿意接受:
编辑
是否可以通过某种方式“计算” Position对象的字节大小,“计算”该对象内Tile属性的地址,并使用类似Buffer.BlockCopy的方式将这些值复制到数组?
答案 0 :(得分:0)
您可以通过Array.C#复制来解决它
public class Group
{
public Position[] Positions { get; private set; }
public void ShiftRight()
{
Array.Copy(Positions,0,Positions,1,Positions.Length-1);//Right
Positions[0].Tile=null;
Array.Copy(g,1,g,0,g.Length-1);
}
public void ShiftLeft()
{
Array.Copy(Positions,1,Positions,0,Positions.Length-1)
Positions[Positions.Length-1].Tile=null;
}
}
public class Position
{
// [other properties]
public Tile Tile { get; set; }
}