Article View: pl.comp.lang.vbasic
Article #92235Re: Wydajne usuwanie z ArrayList (długie)
From: lisz
Date: Thu, 20 Oct 2005 11:12
Date: Thu, 20 Oct 2005 11:12
56 lines
2771 bytes
2771 bytes
Użytkownik "Piotr Lipski" <piotr.lipski@nie.p0czta.spamuj.b0.onet.w.ryj.pl>
napisał w wiadomości news:dj7cg8$s8a$1@news.onet.pl...
> Kolejny pomysł - zajrzę na Google, a w międzyczasie zapytam na grupie
> vbasic, może mi ktoś coś zasugeruje...
Przychodzi mi do glowy zmodyfikowanie Twoich obiektow
przez dodanie implementacji GetHashCode()+Equals()
w polaczeniu z arraylist.Remove(). Można by to opakowac
we wlasą metodę, dziedziczac po ArrayList albo CollectionBase.
W tym sposobie chodzi o to, ze obiekty same "wiedzą" jak sie
porównywać:
Public Class MyClass1
Public Sub New(ByVal s As Integer)
status1 = s
End Sub
Private status1 As Integer
Public Overrides Function GetHashCode() As Integer
Return status1.GetHashCode()
End Function
Public Overloads Overrides Function Equals(ByVal obj As _
Object) As Boolean
Dim ret As Boolean = False
If (TypeOf (obj) Is MyClass1 AndAlso Not obj Is Nothing) Then
Dim o As MyClass1 = DirectCast(obj, MyClass1)
If (Me.status1 = o.status1) Then
ret = True
End If
End If
Return ret
End Function
End Class
I teraz dodajemy jakies obiekty, dwa mają status=1
private al as new Arraylist()
(...)
al.Add(New MyClass1(1))
al.Add(New MyClass1(1))
al.Add(New MyClass1(2))
al.Add(New MyClass1(3))
I usuwamy ze statusem =1:
Dim count As Integer = al.Count
Dim toRemove = New MyClass1(1)
Do While (al.Count = count)
al.Remove(toRemove)
count -= 1
Loop
Ten ostatni kawalek kodu mozna by zamknac w jakiejs
swojej metodzie, dziedziczac po ArrayList i dodając
metode typu DeleteAll(status as integer)
Nie wiem czy bedzie to szybsze od Twojego sposobu,
ale przynajmnie bedzie ladnie zapakowane =)
Technical Details
Message-ID:
<dj7u1u$tj8$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<dj7cg8$s8a$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: "lisz" <lisz@alamakota.poczta.onet.pl> Newsgroups: pl.comp.lang.vbasic Subject: Re: Wydajne usuwanie z ArrayList (długie) Date: Thu, 20 Oct 2005 13:12:12 +0200 Organization: Onet.pl Lines: 59 Message-ID: <dj7u1u$tj8$1@news.onet.pl> References: <dj7cg8$s8a$1@news.onet.pl> NNTP-Posting-Host: beh80.neoplus.adsl.tpnet.pl X-Trace: news.onet.pl 1129806718 30312 83.28.19.80 (20 Oct 2005 11:11:58 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Thu, 20 Oct 2005 11:11:58 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-Sender: 6WJvgHtt5ui9zJCgBI2xqw8SGtFsOHR8 X-RFC2646: Format=Flowed; Original X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit