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
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
Hei,
Sinun antama koodisi toimii hyvin Kiitokset.
Miten ihmeessä se on noin nopea?
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ää.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.