首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作簡單的資料移動演算法(三)

     編輯:關於C語言

通過上面的類別圖可以基本了解實現的結構,MoveSeqArithmeticItem 是移動順序演算法中的資料元素實體,其中 Obj 是資料物件,ObjKey 是資料物件中的關鍵 ID,其實該類別就是中間的一個包裝,只是提供了排序欄位 Seq 和 AfterSetSequenceEvent 事件(設定序號後觸發的事件)。

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.GetPrevViewItemByArea(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.PrevViewItem;
            moveItem.PrevViewItem = o.LItem;
            moveItem.BackItem = o.LItem.BackItem;
            o.LItem.BackItem = moveItem;
        }
    }

    this.Sort();
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved