dim ASP Array - PullRequest
       25

dim ASP Array

1 голос
/ 10 февраля 2009

Я хочу определить массив.

Мой вопрос: Дим х (999) или Дим х (9999) будет стоить столько же, или Дим х (9999) будет тратить больше ресурсов?

Большое спасибо !!

Ответы [ 4 ]

2 голосов
/ 10 февраля 2009

Естественно, что создание массива с 9999 элементами в нем будет занимать больше памяти, чем массив с только 999. Я подозреваю, что это на самом деле не ваш вопрос. Может быть, вы пытаетесь найти способ выделить достаточно памяти для динамического объема данных? Вы можете изменить размеры массивов в классическом ASP (VBScript) с помощью оператора ReDim - вы можете сделать это, когда известен истинный размер.

1 голос
/ 10 февраля 2009

Массивы размещаются в непрерывной памяти. Следовательно, массив из 10000 элементов будет занимать в 10 раз больше памяти, чем тот, которому требуется 1000 элементов.

Вы можете начать с малого и увеличивать массив по мере необходимости. В прошлом я использовал этот класс для создания типа списка переменной длины.

Class List
    Dim maItems
    Dim mlCount

    Public Sub Class_Initialize()
       ReDim maItems(8)
       mlCount = 0
    End Sub

    Public Function Add(Item)
       If mlCount = UBound(maItems) ReDim Preserve maItems(mlCount * 2)
       mlCount = mlCount + 1
       maItems(mlCount) = Item
       Add = mlCount
    End Function

   Public Property Get Item(Index)
       If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range"
       Item = maItems(Index)
   End Property

   Public Property Get Count()
       Count = mlCount
   End Property
End Class    
0 голосов
/ 23 сентября 2009

Я немного добавил к коду Энтони У Джонса, поэтому он возвращает массив (ToArray ()) с правильным размером только с соответствующими элементами.

Class List    
    Dim maItems    
    Dim mlCount

    Public Sub Class_Initialize()       
        ReDim maItems(8)
        mlCount = 0    
    End Sub    

    Public Function Add(Item)            
        If mlCount = UBound(maItems) Then ReDim Preserve maItems(mlCount * 2)       
        maItems(mlCount) = Item  
        mlCount = mlCount + 1
        Add = mlCount   
    End Function

    Public Property Get ToArray()

        ReDim Result(Params.Count-1)

        Dim i
        For i = 0 to Params.Count-1
            Result(i) = Params.maItems(i)
        Next

        ToArray = Result        
    End Property

    Public Property Get Item(Index)       
        If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range"       
        Item = maItems(Index)   
    End Property   

    Public Property Get Count()       
        Count = mlCount   
    End Property   
End Class
0 голосов
/ 10 февраля 2009

Это большой массив?

почему бы вам не назначить его динамически, а затем расширять по мере его роста?

<%
Dim myDynArray() 

ReDim myDynArray(1)
myDynArray(0) = "Albert Einstein"
myDynArray(1) = "Mother Teresa"

ReDim Preserve myDynArray(3)
myDynArray(2) = "Bill Gates"
myDynArray(3) = "Martin Luther King Jr."

For Each item In myDynArray
    Response.Write(item & "<br />")
Next
%>

вывод кода выше

Albert Einstein Mother Teresa Bill Gates Martin Luther King Jr. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...