/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Slette del af et array
Fra : ST


Dato : 28-09-04 09:20

Hvordan slette man en del af et array.

TestArray(0)
TestArray(1)
TestArray(2)
TestArray(3)
TestArray(4)

Hvis jeg gerne vil slette TestArray(2) så TestArrayet bliver:

TestArray(0)
TestArray(1)
TestArray(2)
TestArray(3)

I dot.net er der vist en kommando der hedde Remove.



 
 
Lars Holm Jensen (28-09-2004)
Kommentar
Fra : Lars Holm Jensen


Dato : 28-09-04 10:08

> Hvis jeg gerne vil slette TestArray(2) så TestArrayet bliver:
>
> TestArray(0)
> TestArray(1)
> TestArray(2)
> TestArray(3)
>
> I dot.net er der vist en kommando der hedde Remove.

Det er ikke muligt i VB. Brug Collections, og det ikke er muligt og hvis dit
array aldrig bliver rigtigt stort, så kan du bruge et loop, der flytter
hvert element en plads tilbage. (Det er det, der sker i Java's ArrayList og
sikkert også .NET's datastrukturer, som virker med indexes)

/Lars



ST (28-09-2004)
Kommentar
Fra : ST


Dato : 28-09-04 19:50

Så må jeg jo bruge neaterthaler metoden og dumpe arrayet i en fil og så læse
det jeg vil bruge ind igen.


"Lars Holm Jensen" <lhj@larsholm.net> wrote in message
news:415929e8$0$55825$14726298@news.sunsite.dk...
>> Hvis jeg gerne vil slette TestArray(2) så TestArrayet bliver:
>>
>> TestArray(0)
>> TestArray(1)
>> TestArray(2)
>> TestArray(3)
>>
>> I dot.net er der vist en kommando der hedde Remove.
>
> Det er ikke muligt i VB. Brug Collections, og det ikke er muligt og hvis
> dit array aldrig bliver rigtigt stort, så kan du bruge et loop, der
> flytter hvert element en plads tilbage. (Det er det, der sker i Java's
> ArrayList og sikkert også .NET's datastrukturer, som virker med indexes)
>
> /Lars
>



Tomas Christiansen (29-09-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 29-09-04 20:06

ST skrev:
> Så må jeg jo bruge neaterthaler metoden og dumpe arrayet i en fil og så
læse
> det jeg vil bruge ind igen.

Hvorfor dog det?
Hvis du bruger et dynamisk array (dvs. du ikke angiver størrelsen ved Dim,
men senere hen med ReDim), kan du med en for-løkke flytte elementerne én op
og bruge ReDim Preserve til at gøre tabellen én mindre.

-------
Tomas


Lars Holm Jensen (30-09-2004)
Kommentar
Fra : Lars Holm Jensen


Dato : 30-09-04 11:57

Jeg har lavet en lille implementation af et array med remove-featuren (Så
hurtigt det kan gøres)
Bemærk dog at remove stadig tager O(n),(selv om der ikke er en løkke), og
ikke O(1) som add, set og get.
Her er det implementeret som et Long array, men det kan I jo bare ændre som
I har lyst.

'Class module

Private Declare Sub MemCopy Lib "kernel32" Alias "RtlMoveMemory" (Dest As
Any, Src As Any, ByVal cb&)

Dim myArray() As Long

Public Sub Class_Initialize()

End Sub

Public Sub Class_Terminate()

Erase myArray

End Sub

Public Property Get getValue(ByVal index As Long) As Long

getValue = myArray(index)

End Property

Public Sub addValue(ByVal myValue As Long)

Dim mySize As Long
mySize = size()
If mySize = -1 Then
ReDim Preserve myArray(0)
myArray(0) = myValue
Else
ReDim Preserve myArray(mySize)
myArray(mySize) = myValue
End If

End Sub

Public Sub setValue(ByVal index As Long, ByVal myValue As Long)

If index < size() Then
myArray(index) = myValue
Else
ReDim Preserve myArray(index)
myArray(index) = myValue
End If

End Sub

Public Property Get size() As Long
On Error GoTo emptyarray

size = UBound(myArray) + 1
Exit Property

emptyarray:
size = -1
End Property

Public Function Remove(ByVal index As Long) As Boolean

On Error GoTo Hell
Dim i As Long
Dim mySize As Long
mySize = size()

If mySize = 1 Then
Erase myArray
Remove = True
Exit Function
ElseIf index = (mySize - 1) Then
ReDim Preserve myArray(mySize - 2)
Remove = True
Exit Function
End If

MemCopy myArray(index), myArray(index + 1), Len(myArray(index)) *
(UBound(myArray) - index)

ReDim Preserve myArray(mySize - 2)
Remove = True
Exit Function

Hell:
MsgBox Err.Number & " - " & Err.Description
End Function


/Lars



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste