1

PHPは連想配列を提供しますが、古典的なaspにはそのようなものはありません。次のような階層を作成してトラバースできるクラスまたは関数を探しています。

United States
  Washington
    Electric City
      Banks Lake 
    Lake Chelan
      Wapato Point 
    Gig Harbour
Mexico
  Nayarit
    Aticama
Asia
  India
    Mumbai
  Pakistan
    Sindh
      Karachi

お気づきのように、階層の深さは不均一です。3、4、または5レベルの深さである可能性があります。データベース構造はさらに複雑です。一部のレコードでは地域レベルからデータの表示を開始する必要がありますが、他のレコードでは国から開始する必要があります。配列の配列は本当に役に立ちますが、ASPでは私の手は縛られています。

4

5 に答える 5

4

VBScript の代わりにサーバー側で JScript を使用することをお勧めします。この種のことをより自然に行うだけでなく、言語に慣れる可能性が高くなります。欠点は、ASP に関連する Web 上の「ハウツー」の大部分が VBScript で記述されていることです。

VBScript の連想配列は、ライブラリDictionaryから入手できると呼ばれます。Scriptingただし、階層構造を作成するには、おそらくもう少し助けが必要です。の周りにクラスを作成してDictionary、単なるNameプロパティ以上のものを保持できるようにし、階層的な操作を容易にします。

サンプルクラスは次のとおりです。

Class Node
   Private myName
   Private myChildren

   Private Sub Class_Initialize()
     Set myChildren =  CreateObject("Scripting.Dictionary")
   End Sub

   Public Property Get Name()
      Name = myName
   End Property

   Public Property Let Name(value)
      myName = Value
   End Property

   Public Function AddChild(value)

     If Not IsObject(value) Then
       Set AddChild = new Node
       AddChild.Name = value
     Else
       Set AddChild = value
     End If

     myChildren.Add AddChild.Name, AddChild

   End Function


   Public Default Property Get Child(name)
     Set Child = ObjectOrNothing(myChildren.Item(name))
   End Property

   Public Property Get Children()
     Set Children = myChildren
   End Property

   Private Function ObjectOrNothing(value)
     If IsObject(value) Then
       Set ObjectOrNothing = value
     Else
       Set ObjectOrNothing = Nothing
     End If
   End Function

End Class

これでツリーを作成できます:-

 Dim root : Set root = new Node
 With root.AddChild("United States")
   With .AddChild("Washington")
     With .AddChild("Electric City")
       .AddChild "Banks Lake"
     End With
     With .AddChild("Lake Chelan")
       .AddChild "Wapato Point"
     End With
     .AddChild "Gig Harbour" 
   End With
 End With

この階層に次のようにアクセスします:-

Sub WriteChildrenToResponse(node)
  For Each key In node.Children

    Response.Write "<div class=""node"">" & vbCrLf
    Response.Write "<div>" & root.Child(key).Name "</div>" & vbCrlF
    Response.Write "<div class=""children"">" & vbCrLf

    WriteChildrenToResponse root.Child(key)

    Response.Write "</div></div>"
  Next
End Sub

''# Dump content of root heirarchy to the response
WriteChildrenToResponse root
于 2009-10-02T10:22:15.623 に答える
1

階層をXMLDOMオブジェクトに入れて、そのようにトラバースすることができます。

于 2009-10-02T08:18:17.813 に答える
0

Server.CreateObject( "Scripting.Dictionary")を使用します

http://msdn.microsoft.com/en-us/library/x4k5wbx4(VS.85).aspx

于 2009-10-02T06:24:23.430 に答える
0

SQL 側の実体化されたパス モデルを確認することをお勧めします。これにより、相対的な「静的」ツリーの操作が非常に簡単になります。

于 2009-10-02T08:05:45.940 に答える
0

これらを含むクラスを次のように作成します。

Class Area
  Public Name
  Private _children

  Private Sub Class_Initialize()
    _children = Array()
  End Sub

  Public Property Get Children()
    Set Children = _children
  End Property

  Public Sub AddChild(newChild)
    ReDim Preserve _children(UBound(_children)+1)
    Set _children(UBound(_children)) = newChild
  End Sub
End Class
于 2009-10-02T10:30:42.233 に答える