WEB开发网
开发学院软件开发C语言 简单的数据移动算法(C#) 阅读

简单的数据移动算法(C#)

 2009-04-14 08:24:52 来源:WEB开发网   
核心提示: MoveSeqArithmetic是算法的核心,需要特别说明下的是SequenceAreaEntity类,简单的数据移动算法(C#)(2),该类是数据集合中连续区域对象的结构,目的是方便对于多个连续或不连续的数据进行操作,MoveSeqArithmetic中移动的具体实现还是看下面的图更加

MoveSeqArithmetic是算法的核心,需要特别说明下的是SequenceAreaEntity类,该类是数据集合中连续区域对象的结构,目的是方便对于多个连续或不连续的数据进行操作。MoveSeqArithmetic中移动的具体实现还是看下面的图更加清晰,

简单的数据移动算法(C#)

图片看不清楚?请点击这里查看原图(大图)。

核心代码: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();
}

Tags:简单 数据 移动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接