Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Kahden tekstin rivien vertailu

Nimimerkki [10.08.2016 13:23:29]

#

Hei,

Tällä koodilla olen tehnyt rivi vertailua, mutta ohjelmani on aivan liian hidas jos pitäisi esim verrata 30 tuhannen txt tiedosta toiseen joka on 8 tuhatta riviä niin kestäisi liian kauan.

Ohelman tarkoitus on siis verrata kahta teksti kenttää toisiinsa ja poistaa toisesta kentästä samankaltaisuudet.

Public Class Form1
    Dim rivinumero As Integer = 0
    Dim rivinumero2 As Integer = 0


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim poistorivit As Integer = TextBox1.Lines.Length

        Do Until rivinumero2 = TextBox2.Lines.Length
            For i As Integer = 0 To poistorivit - 1
                If rivinumero2 = TextBox2.Lines.Length Then

                    Exit For

                End If

                If TextBox1.Lines(rivinumero) = (TextBox2.Lines(rivinumero2)) Then
                    TextBox1.Text = TextBox1.Text.Replace(TextBox2.Lines(rivinumero2), "")

                End If

                rivinumero += 1
                If rivinumero = poistorivit Then
                    rivinumero2 += 1
                    rivinumero = 0
                End If

            Next

        Loop

        Label1.Text = rivinumero
        Application.DoEvents()

    End Sub

End Class

Grez [10.08.2016 13:34:37]

#

Toimisiko tämä versio nopeammin?

Public Class Form1
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox1.Lines = TextBox1.Lines.Except(TextBox2.Lines).ToArray()
    End Sub
End Class

Nimimerkki [10.08.2016 15:02:59]

#

Hei,

Sinun antama koodisi toimii hyvin Kiitokset.

Miten ihmeessä se on noin nopea?

Grez [10.08.2016 15:20:00]

#

Yleisesti ottaen tietomäärien kasvaessa on käytettävän algoritmin valitseminen keskeistä nopeuden kannalta. Käyttämäsi algoritmi oli tyyppiä O(n^2), eli suunnilleen hitain mahdollinen tuohon tehtävään.

Laittamani koodi käyttää .Net frameworkiin sisältyvää Except -funktiota, joka siis palauttaa listalta ne elementit, jotka ei sisälly parametrina annettavaan listaan.

.Net frameworkin algoritmeja on miettineet ja kehittäneet alan ammattilaiset. Voisi siis sanoa että "pyörä kannattaa keksiä uudestaan" vain jos on luokkaa algoritmiguru ja on oikeasti varma että oma käyttämä algoritmi on tehokkaampi (tai muuten parempi) kuin .Net frameworkin vakioalgoritmit.

Myöskin sen vuoksi kannattaa käyttää frameworkin tarjoamia valmiita työkaluja, että koodista tulee selkeämpää.

Nimimerkki [10.08.2016 16:13:07]

#

Minulle ei ole vielä läheskään kaikki .net frameworkin algoritmit tuttuja.

Olen lähes varma että olen joutunut monta kertaa ns keksimään pyörän uudestaan, koska en ole tutustunut tarpeeksi hyvin noihin valmiisiin alkoihin.


Kiitos vielä koodistasi ja kommenteista.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta