• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在VB里巧用集合

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 22次 | 進入軟件測試論壇討論

    領測軟件測試網 李成俊 趙文杰

    ---- VB 提 供 一 種 很 有 用 的 數 據 類 型 集 合(Collection)。 她 的 工 作 原 理 類 似 與C 里 的 鏈 表, 可 以 很 方 便 的 實 現 插 入, 刪 除。 并 且 在 使 用 了Key 之 后, 檢 索 操 作 也 變 得 非 常 簡 單。 但 其 編 程 上 的 方 便 卻 帶 來 了 效 率 上 的 急 劇 下 降( 尤 其 在 大 數 據 量 時 會 讓 你 無 法 忍 受)。 以 下 舉 兩 個 例 子 來 討 論 一 下 怎 樣 把 集 合 和 數 組 結 合 使 用, 使 程 序 在 方 便 和 效 率 之 間 達 到 一 種 平 衡。
    ---- 1 . 要 求 建 立 一 數 據 結 構, 用 來 保 存 學 生 的 學 號, 姓 名 和 成 績, 并 在 需 要 時 以 成 績 的 高 低 按 順 序 輸 出 這 些 信 息。

    ---- 這 里 我 想 提 供 兩 種 解 決 方 法( 當 然 還 有 其 他 方 法)。

    ---- 第 一 種: 完 全 用 集 合 來 保 存 數 據。

    ---- 首 先 定 義 一 個 結 構 如 下( 該 結 構 同 時 用 與 第 二 種 方 式)

    Type tMyType
       ID As Long
       Name As String
       Score As Integer
    End Type
    再定義類clsData如下
    Public ID As Long
    Public Name As String
    Public Score As Integer
      并定義插入函數用來接受數據并插入到數據結構中
    Public Function InsertToCol(pData As tMyType)
      注釋:其中m_ColData保存記錄
      Dim myClass As New clsData
      Set myClass = Nothing
      For iLoopCtrl = 1 To m_ColData.Count
        If m_ColData(iLoopCtrl).Score
    < = pData.Score Then Exit For
      Next
      myClass.ID = pData.ID
      myClass.Name = pData.Name
      myClass.Score = pData.Score
    If m_ColData.Count = 0 Or iLoopCtrl
    = m_ColData.Count Then
        m_ColData.Add Item:=myClass
      Else
    m_ColIndex.Add Item:=myClass,
      before:=iLoopCtrl
      End If
    End Function
    這時,對每個記錄做處理如下
    Public Function OutProcess()
      For iLoopCtrl = 1 To m_ColData.Count
        CurrentID = m_ColData(iLoopCtrl).ID
        CurrentName = m_ColData(iLoopCtrl).Name
    CurrentScore = m_ColData(iLoopCtrl).Score
    注釋:對當前記錄做相應處理
      Next
    End Function

    ---- 第 二 種: 將 數 組 與 集 合 結 合 起 來, 用 數 組 保 存 數 據 而 用 集 合 保 存 排 序 信 息。
    ---- 首 先 定 義 如 下 變 量

    Public m_Array(99) As tMyType
    注釋:根據需要也可以定義成動態數組
    Public m_ColIndex As New Collection
    注釋:用來保存索引信息
    向數組中插入數據的函數如下
    Public Function InsertToArray(pData As tMyType)
      If iCurIndex > 99 Then Exit Function
      For iLoopCtrl = 1 To m_ColIndex.Count
    If m_Array(m_ColIndex(iLoopCtrl)).Score
    < = pData.Score Then Exit For
      Next
      If m_ColIndex.Count = 0 Or iLoopCtrl
         = m_ColIndex.Count Then
        m_ColIndex.Add iLoopCtrl - 1
      Else
        m_ColIndex.Add iLoopCtrl - 1, before:=iLoopCtrl
      End If
      m_Array(iCurIndex).ID = pData.ID
      m_Array(iCurIndex).Name = pData.Name
      m_Array(iCurIndex).Score = pData.Score
      iCurIndex = iCurIndex + 1
    End Function

    這時,對每個記錄做處理如下

    Public Function OutProcess()
      For iLoopCtrl = 1 To m_ColData.Count
    I = m_ColData(iLoopCtrl)
        CurrentID = m_Array(I).ID
        CurrentName = m_Array(I).Name
        CurrentScore = m_Array(I).Score
        注釋:對當前記錄做相應處理
      Next
    End Function

    ---- * 性 能 分 析
    ---- 對 于 集 合 來 講, 隨 著 記 錄 個 數 的 增 長, 對 集 合 的 操 作 效 率 飛 快 下 降。 因 為, 集 合 按 下 標 查 找 一 記 錄 時 首 先 從 集 合 的 頭 一 條 記 錄 開 始, 順 序 向 下, 直 到 指 定 的 下 標 位 置。 因 此, 訪 問m_ColData(99) 要 比 訪 問m_ColData(1) 慢 的 很 多。 而 大 家 都 知 道 數 組 在 內 存 中 是 順 序 存 放, 因 此, 訪 問 某 條 記 錄 的 效 率 與 下 標 大 小 無 關。 當 記 錄 數 或 每 個 記 錄 的 項 目 數 越 大, 效 率 的 提 高 越 明 顯。( 大 家 可 以 自 己 寫 一 些 測 試 程 序, 具 體 比 較 以 下 它 們 之 間 的 效 率 差 別, 會 感 到 非 常 驚 訝 的)

    ---- 2 . 當 記 錄 有 唯 一 關 鍵 字, 并 經 常 以 這 個 關 鍵 字 做 查 詢 時 可 以 使 用 以 下 方 法。

    ---- 定 義 用 于 保 存 數 據 的 結 構 和 結 構 數 組

    Type tMyType
      Item_1 As String
    注釋:為關鍵字
      Item_2 As String
      Item_3 As String
    End Type
    Public m_Array() As tMyType
    Public m_ColIndex As New Collection
    注釋:用于保存索引的集合
    定義用于保存索引信息的類clsIndex如下
    Public Item_Key As String
    Public ID_OfArray As Integer
    當接受到一條記錄pData后插入過程如下
    Public Function InsertData(pData As tMyType)
    Dim myClass As New clsIndex
    ID_OfArray = ID_OfArray + 1
    m_Array(ID_OfArray).Item_1 = pData.Item_1
    m_Array(ID_OfArray).Item_2 = pData.Item_2
    m_Array(ID_OfArray).Item_3 = pData.Item_3
    myClass.Item_Key = pData.Item_1
    myClass.ID_OfArray = ID_OfArray
    m_ColIndex.Add Item:=myClass, Key:=pData.Item_1
    End Function
    那么,當需要以給出的關鍵字(mKey)
             取得數據時,用以下方法實現
    Current_Item1 = m_Array(myClass(mKey)
        .ID_OfArray).Item_1
    Current_Item2 = m_Array(myClass(mKey)
        .ID_OfArray).Item_2
    Current_Item3 = m_Array(myClass(mKey)
        .ID_OfArray).Item_3

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>