ASP集合

大多數 ASP 內建對象支持集合。集合是存儲字元串、數字、對象和其他值的地方。除了在存儲或取出項目時集合會自動擴展與搜尋外,集合與數組非常相近。與數組不同的是,集合被修改後,項目的位置將會移動。可以通過集合中項目的名稱、索引或者通過在集合的所有項目中遍歷訪問項目。

基本介紹

  • 中文名:ASP集合
使用集合,訪問項目,遍歷集合,子關鍵字集合,遍歷對象集合,ASP集合區分,

使用集合

大多數 ASP內建對象支持集合。集合是存儲字元串、數字、對象和其他值的地方。除了在存儲或取出項目時集合會自動擴展與搜尋外,集合與數組非常相近。與數組不同的是,集合被修改後,項目的位置將會移動。可以通過集合中項目的名稱、索引或者通過在集合的所有項目中遍歷訪問項目。

訪問項目

通過使用項目名稱可以訪問集合中的具體項目。例如,Contents集合擁有在Session對象中保存的所有變數。同樣也擁有由Server.CreateObject創建的所有對象。假設在Session對象中存儲了下列用戶信息:
<%Session.Contents("FirstName") = "Sam"Session.Contents("LastName") = "Woo"Session.Contents("Age") = 29%>
可以使用在集合中存儲項目時關聯的名稱訪問項目。例如,下面的表達式返回字元串“Sam”:
<%= Session.Contents("FirstName") %>
通過使用與項目關聯的索引或號碼也可以訪問項目。例如,下面的表達式檢索存儲在Session對象的第二個存儲槽中的信息並且返回“Woo”:
<%= Session.Contents(2) %>
ASP 集合從 1 開始編號。當在集合中增加或刪除項目時,與項目關聯的索引將會改變。所以不能認為項目的索引始終不變。正如將在下面的主題中說明的那樣,利用索引的訪問一般用來遍歷集合,或訪問唯讀集合中的項目。
通過使用速記的名稱可以訪問項目。ASP 以特定的順序搜尋與對象關聯的集合。如果在對象的集合中特定名稱的項目只出現一次的話,可以消除該集合的名稱:
<%= Session("FirstName") %>
訪問存儲在ApplicationSession對象中的項目時,消除集合名稱一般是安全的。但是,對於Request對象,最好指定集合名稱,因為該集合很可能包含重複的名稱。

遍歷集合

在集合的所有項目中遍歷可以了解集合中存儲的項目或修改項目。遍歷集合時,必須提供集合名稱。例如,可以使用 VBScript 中的For...Each語句訪問存儲在Session對象中的項目:
<% 'Declare a counter variable.Dim Item 'For each item in the collection, display its value.For Each Item in Session.Contents Response.Write Session.Contents(Item) & "<BR>"Next%>
可以使用 VBScript 中的For...Next語句遍歷集合。例如,要列出上例中存儲在Session中的三個項目,可以使用下列語句。
<% 'Declare a counter variable.Dim Item'Repeat the loop until the value of counter is equal to 3.For Item = 1 to 3 Response.Write Session.Contents(Item) & "<BR>"Next%>
因為一般不知道存儲在集合中的項目個數,ASP 支持集合的Count 屬性,這個屬性返回集合中的項目數。可以使用Count屬性指定計數器的終值。
<% 'Declare a counter variable.Dim Item'Repeat this loop until the counter equals the number of items'in the collection.For Item = 1 to Session.Contents.Count Response.Write Session.Contents(Item) & "<BR>"Next%>
可以在腳本中使用for語句在集合中循環。在 JScript 的for語句中使用Count屬性時,為了收到更大的效果,應該將Count值分配給本地變數並使用該變數設定計數器終值。這樣,腳本引擎就不需要每次循環都查尋Count的值。下面的例子展示了這個技巧:
<% var item, numitems;numitems = Session.Contents.Count;for (item = 1; item <= numitems; item++) { Response.Write(Session.Contents(item) + "<BR>")}%>
Microsoft JScript 3.0 引入了Enumerator對象。可以使用該對象遍歷 ASP 集合。atEnd方法指出了集合中是否還存在項目。moveNext方法移動到集合中的下一個項目。
<%// Create an Enumerator objectvar mycoll = new Enumerator(Session.Contents);//Iterate through the collection and display each itemwhile (!mycoll.atEnd()) { var x = mycoll.item(); Response.Write(Session.Contents(x) + "<BR>"); mycoll.moveNext();}%>

子關鍵字集合

腳本在單一 cookie 中嵌入相關值以減少在瀏覽器和 Web 伺服器之間傳送的 cookie 數目。因此RequestResponse對象的Cookies集合能夠在單一項目中擁有多個值。這些子項目或子關鍵字可以被單個訪問。只有Request.CookiesResponse.Cookies集合支持子關鍵字 (Subkeys)。Request.Cookies只支持讀操作;Response.Cookies只支持寫操作。
可以列舉Request.Cookie集合中所有的 cookie 以及 Cookie 中所有的子關鍵字 (Subkeys)。但是,如果在沒有子關鍵字 (Subkeys) 的 Cookie 上遍歷子關鍵字,將不會產生任何結果。通過使用.HasKeys語法首先檢查 cookie 是否含有子關鍵字 (Subkeys),就可以避免這種情況。下面的這個例子展示了這個技巧。
<% 'Declare counter variablesDim Cookie, Subkey'Display the entire cookie collection.For Each Cookie in Request.Cookies Response.Write Cookie & "<BR>" If Request.Cookies(Cookie).HasKeys Then 'Display the subkeys For Each Subkey in Request.Cookies(Cookie) Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>" Next Else Response.Write "No subkeys in this cookie <BR>" End IfNext %>

遍歷對象集合

SessionApplication集合可以保存數量變數或者對象實例。Contents集合擁有數量變數和通過調用Server.CreateObject生成的對象實例。StaticObjects集合擁有在 Global.asa 檔案中使用 HTML <OBJECT> 元素創建的對象。
在遍歷包含對象的集合時,可以訪問對象的標識符或對象的方法和屬性。例如,假設應用程式使用一些對象創建用戶帳號,而且每個對象有初始化方法,可以遍歷StaticObjects集合來調用每個初始化方法:
<%For Each Object in Session.StaticObjects Session.StaticObjects(Object).InitializeUserNext%>

ASP集合區分

儘管在本主題中討論的 ASP 集合與 Visual Basic的Collection對象非常相似,但還是有些不同。ASP 集合支持Count屬性和Item方法,但不支持AddRemove方法。

相關詞條

熱門詞條

聯絡我們