简单的数据移动算法(C#)
2009-04-14 08:24:52 来源:WEB开发网MoveSeqArithmetic是算法的核心,需要特别说明下的是SequenceAreaEntity类,该类是数据集合中连续区域对象的结构,目的是方便对于多个连续或不连续的数据进行操作。MoveSeqArithmetic中移动的具体实现还是看下面的图更加清晰,
图片看不清楚?请点击这里查看原图(大图)。
核心代码:MoveUpByKeys
/// <summary>
/// 将数据元素全部向上移动
/// </summary>
/// <param name="objKeys">对象关键字</param>
public void MoveUpByKeys(object[] objKeys)
{
#region 预处理
if (objKeys == null)
{
return;
}
#endregion
Hashtable hs = this.GetSequenceAreasByKeys(objKeys);
foreach (DictionaryEntry h in hs)
{
SequenceAreaEntity o = (SequenceAreaEntity)h.Value;
//移动的数据
MoveSeqArithmeticItem<T, K> moveItem = this.GetPreviewItemByArea(o);
if (moveItem != null)
{
int moveIndex = moveItem.Seq;
int fIndex = o.FItem.Seq;
int lIndex = o.LItem.Seq;
foreach (MoveSeqArithmeticItem<T, K> entry in o.ArrAreas)
{
entry.Seq = entry.Seq - fIndex + moveIndex;
}
moveItem.Seq = lIndex;
o.FItem.PreviewItem = moveItem.PreviewItem;
moveItem.PreviewItem = o.LItem;
moveItem.BackItem = o.LItem.BackItem;
o.LItem.BackItem = moveItem;
}
}
this.Sort();
}
更多精彩
赞助商链接