Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [vb2010] tyhjien ja samojen muuttujien poistaminen

jokke568 [14.10.2011 19:45:41]

#

Hei

Ohjelma kerää numerosarjat numerot() as string muuttujaan ja ongelmani on miten saan tietueesta poistettua tyhjät ja samat numerosarja

           Dim apu As String = ""
            For i = 0 To k - 1 ' + 1
                For j = i + 1 To k - 1 ' + 1
                    If numerot(j) = "" Then GoTo xxc
                    If numerot(j) <> numerot(i) Then
                        apu = numerot(i)
                        numerot(i) = numerot(j)
                        numerot(j) = apu

                    End If
xxc:
                Next j
            Next i

yllä olevaa olen säätänyt jo ihan tarpeeksi, joten ehtisikö joku auttamaan mikä on väärin

Grez [14.10.2011 19:51:53]

#

Numerot = Numerot.Where(Function(a) a <> "").Distinct().ToArray()

Metabolix [14.10.2011 20:39:46]

#

Jos lähdetään tuolle alkuperäiselle tee-se-itse-linjalle, yksinkertainen ratkaisu olisi ensin järjestää taulukko (tuo alkuperäinenhän on melkein kelpo lajittelu, otetaan vain ensimmäinen If pois ja laitetaan toiseen pelkkä < vertailuksi) ja sitten soveltaa jotain tällaista:

ylin = -1
For i = 0 To k - 1
  If numerot(i) = "" Or (ylin <> -1 And numerot(i) = numerot(ylin)) Then Continue
  ylin = ylin + 1
  numerot(ylin) = numerot(i)
Next i
ReDim Preserve numerot(ylin)

jokke568 [14.10.2011 20:48:39]

#

SUURI KIITOS GREZ

Lausettasi en saanut toimimaan, mutta muutin sen muotoon

Numerot = Numerot.Distinct().ToArray()

tietueeseen jää vain yksi tyhjä muuttuja, jonka saan suljettua pois myöhemmin if lausekkeella.

Aivan käsittämätöntä, että tuon kaiken jonka kanssa olen taistellut useita tunteja voi hoitaa yhdellä rivillä !!

Mistä vastaavia toimintoja voi etsiä, ettei jatkossa tule tehtyä turhaa työtä?

Suuri kiitos vielä Grez, pelastit päivän!

Grez [14.10.2011 21:13:00]

#

jokke568 kirjoitti:

Lausettasi en saanut toimimaan

Hämmentävää, ainoa syy mikä tulee mieleen olisi jos a on jo käytössä, jossa tapauksessa tietysti eri nimisen parametrin käyttö ratkaisisi ongelman.

Itse tosiaan tein kokonaan uuden projektin testaamista varten ja koodi kokonaisuudessaan on

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Numerot() As String = {"Moi", "Moi", "joo", ""}

        Numerot = Numerot.Where(Function(a) a <> "").Distinct().ToArray()
    End Sub
End Class

Ja tuo toimi (numerot-taulukossa oli lopussa "Moi" ja "joo")

MSDN:stähän nuo dokumentaatiot löytyy. Eli esimerkiksi Enumerable luokalle ja sitä kautta myös Arraylle löytyy mm. nämä

jokke568 [14.10.2011 21:41:20]

#

Hei Grez

Nyt toimii ensiksi antamasi lauseke. Ottaa tyhjänkin pois tietueesta, joten en tarvitse erillistä If lauseketta sen poistamiseksi. Mulla oli sotkuja seassa, jotka tuli siivottua lauseketta sovellettaessa. Ja lopulta alkuperäinenkin toimi, ja vieläpä täydellisesti. Olisi pitänyt paljon aikaisemmin putkaan kysymään apuja.

Lauseke kokonaisuudessa on minulle uutta. Erittäin kivaa oppia uutta, jota sitten pääsee soveltamaan ja laajentamaan ko. luokan käyttöä.

Kiitos, Kiitos myös Metabolix vaihtoehdosta.

Vastaus

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

Tietoa sivustosta