+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Ordinare una stringa in modo crescente...

  1. #1
    mangzeus non è in linea Scolaretto
    Post
    59

    Ordinare una stringa in modo crescente...

    Ho una stringa numerica...

    esempio

    str="12 34 13 45 2"

    io dovrei ottenere una stringa ordinata in modo crescente

    quindi:

    str="2 12 13 34 45"

    ci sarebbe il metodo "sort" in un array ma come faccio a trasformare la stringa in array, cioè assegnare l'intera stringa all'array

    array(n)
    array(0)=12
    array(1)=34
    ecc

    così poi potrei usare il metodo sort ma come faccio???

    oppure esiste un altro metodo per ordinare una stringa???

  2. #2
    Luogo
    Padova
    Post
    4,228
    Blogs
    36
    Con la funzione split (str.split(separatore)) puoi ottenere un array da una stringa
    ----------------------------------------------------------
    Se avete delle domande fatele prima al forum
    Il mio blog su Masterdrive.it
    Il mio blog su Visual-Basic.it

  3. #3
    mangzeus non è in linea Scolaretto
    Post
    59
    Quote Originariamente inviato da Cteniza Visualizza il messaggio
    Con la funzione split (str.split(separatore)) puoi ottenere un array da una stringa

    saresti così gentile da farmi un esempio con la mia stringa di prima??? Perchè a volte le cifre sono anche a coppie di due, mentre quando sono sotto la decina diventa una cifra sola...


    ok ho trovato...

    ho fatto così

    Dim a As String, c as String
    Dim b
    a = "primo,secondo,terzo"
    b = Split(a, ",")


    adesso però facendo b.sort non me lo prende...
    Ultima modifica di mangzeus; 06-02-2007 09:19 

  4. #4
    Luogo
    Padova
    Post
    4,228
    Blogs
    36
    Prova con Array.Sort
    ----------------------------------------------------------
    Se avete delle domande fatele prima al forum
    Il mio blog su Masterdrive.it
    Il mio blog su Visual-Basic.it

  5. #5
    mangzeus non è in linea Scolaretto
    Post
    59
    Quote Originariamente inviato da Cteniza Visualizza il messaggio
    Prova con Array.Sort
    ho fatto solo che non mi mette in ordine crescente l'array...

    cioè...

    ho questo io...

    a = "1 5 3 2 7 56 23"
    b = Split(a, " ")
    array.Sort()

    c = Join(b, " ")

  6. #6
    Luogo
    Padova
    Post
    4,228
    Blogs
    36
    Ovviamente visto che hai dei valori stringa l'ordinamento avviene per ordine alfabetico dove l'ordine è dato dal valore ascii del carattere partendo da sinistra
    quindi:
    1
    11
    111
    11111
    2
    22
    222
    3
    31
    311
    32
    ecc
    ----------------------------------------------------------
    Se avete delle domande fatele prima al forum
    Il mio blog su Masterdrive.it
    Il mio blog su Visual-Basic.it

  7. #7
    mangzeus non è in linea Scolaretto
    Post
    59
    Quote Originariamente inviato da Cteniza Visualizza il messaggio
    Ovviamente visto che hai dei valori stringa l'ordinamento avviene per ordine alfabetico dove l'ordine è dato dal valore ascii del carattere partendo da sinistra
    quindi:
    1
    11
    111
    11111
    2
    22
    222
    3
    31
    311
    32
    ecc


    e se io volessi ordinarli numericamente in maniera crescente???

  8. #8
    Luogo
    Padova
    Post
    4,228
    Blogs
    36
    Se si tratta di interi puoi convertirli in un array di interi, ordinarli e poi riconvertirli in un aray di stringhe .
    Puoi anche usare una sortedlist, scorrere l'array di lista, appendere tutti gli elementi dell'array convertendo in intero una alla volta
    Terza ipotesi, formatti ciascun elemento aggiungendo tanti spazi quanti ti servono ad allineare i caratteri.
    Esempio:
    codice:
    Dim myArray() As String = "1,2,3,4,5,6,a,b,c".Split(",")
    Dim maxLength As Integer
     
    For k As Integer = 0 To myArray.Length - 1
        Dim j As Integer = imyArray(k).Length
        if j > maxLength then maxLength = j
    Next 
    For k As Integer = 0 To MyArray.Length - 1
       myArray(k) = myArray(k).PadLeft(maxLength," ")
    Next
    (Attenzione che l'esempio l'ho scritto sul forum)
    ----------------------------------------------------------
    Se avete delle domande fatele prima al forum
    Il mio blog su Masterdrive.it
    Il mio blog su Visual-Basic.it

  9. #9
    mangzeus non è in linea Scolaretto
    Post
    59
    Quote Originariamente inviato da Cteniza Visualizza il messaggio
    Se si tratta di interi puoi convertirli in un array di interi, ordinarli e poi riconvertirli in un aray di stringhe .
    Puoi anche usare una sortedlist, scorrere l'array di lista, appendere tutti gli elementi dell'array convertendo in intero una alla volta
    Terza ipotesi, formatti ciascun elemento aggiungendo tanti spazi quanti ti servono ad allineare i caratteri.
    Esempio:
    codice:
    Dim myArray() As String = "1,2,3,4,5,6,a,b,c".Split(",")
    Dim maxLength As Integer
     
    For k As Integer = 0 To myArray.Length - 1
        Dim j As Integer = imyArray(k).Length
        if j > maxLength then maxLength = j
    Next 
    For k As Integer = 0 To MyArray.Length - 1
       myArray(k) = myArray(k).PadLeft(maxLength," ")
    Next
    (Attenzione che l'esempio l'ho scritto sul forum)
    grazie mille avevo risolto facendo un semplice CInt prima di aggiungere i numeri ad un arraylist...grazie...

  10. #10
    mangzeus non è in linea Scolaretto
    Post
    59
    Quote Originariamente inviato da Cteniza Visualizza il messaggio
    Se si tratta di interi puoi convertirli in un array di interi, ordinarli e poi riconvertirli in un aray di stringhe .
    Puoi anche usare una sortedlist, scorrere l'array di lista, appendere tutti gli elementi dell'array convertendo in intero una alla volta
    Terza ipotesi, formatti ciascun elemento aggiungendo tanti spazi quanti ti servono ad allineare i caratteri.
    Esempio:
    codice:
    Dim myArray() As String = "1,2,3,4,5,6,a,b,c".Split(",")
    Dim maxLength As Integer
     
    For k As Integer = 0 To myArray.Length - 1
        Dim j As Integer = imyArray(k).Length
        if j > maxLength then maxLength = j
    Next 
    For k As Integer = 0 To MyArray.Length - 1
       myArray(k) = myArray(k).PadLeft(maxLength," ")
    Next
    (Attenzione che l'esempio l'ho scritto sul forum)

    scusami ma ho provato con la funzione postata da te...ma non mi ordina i numeri in maniera crescente...

    ti spiego io devo fare questa funzione in maniera più veloce possibile, in meno passaggi possibili...

    io ho fatto così...c'è un modo più veloce???

    codice:
    Dim j As Integer
            Dim a As String, c As String
            Dim b
            Dim arrayl As New ArrayList
            arrayl.Clear()
            ''trasformo la stringa in un array
            a = str
    
            ''se a =nothing esci dalla funzione che non serve
            If a = Nothing Then
               Exit Function
            End If
    
            b = Split(a, " ")
    
            ''faccio il ciclo per iserire all'interno di un array list i valori
           For j = 0 To UBound(b)
            '    'converto in numero il contenuto dell'array così mi mette in ordine crescente i numeri, tutti i numeri.
             arrayl.Add(CInt(b(j)))
            Next
    
            ''li ordino
            arrayl.Sort()
    
            b = arrayl
            For j = 0 To arrayl.Count - 1
               c = LTrim(c & " " & arrayl.Item(j))
    
            Next
    
            ritstrord = c

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi