🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.vbasic
Article #92235

Re: Wydajne usuwanie z ArrayList (długie)

#92235
From: lisz
Date: Thu, 20 Oct 2005 11:12
56 lines
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-mail
References: <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