Jump to content

Como ordenar um array (strings) através de Ciclos? [Outros metodos explicados]


bigboy123
 Share

Recommended Posts

Boas a todos.

Preciso de saber como faço para ordenar 21 textboxs onde em cada uma está um nome completo de uma pessoa e ao clicar num botão as ordene por ordem crescente, por exemplo (A, B, C, etc..).

Se parecer confusa a minha dúvida apresento aqui como fiz para ordenar 21 texboxs onde continham numeros em cada uma de maneira a que ficasse por ordem crescente(usei o método, selection sort):

        Dim nome(20) As Integer
        Dim i, max, t, max_pos As Integer

        nome(0) = txtprocesso1.Text
        nome(1) = txtprocesso2.Text
        nome(2) = txtprocesso3.Text
        nome(3) = txtprocesso4.Text
        nome(4) = txtprocesso5.Text
        nome(5) = txtprocesso6.Text
        nome(6) = txtprocesso7.Text
        nome(7) = txtprocesso8.Text
        nome(8) = txtprocesso9.Text
        nome(9) = txtprocesso10.Text
        nome(10) = txtprocesso11.Text
        nome(11) = txtprocesso12.Text
        nome(12) = txtprocesso13.Text
        nome(13) = txtprocesso14.Text
        nome(14) = txtprocesso15.Text
        nome(15) = txtprocesso16.Text
        nome(16) = txtprocesso17.Text
        nome(17) = txtprocesso18.Text
        nome(18) = txtprocesso19.Text
        nome(19) = txtprocesso20.Text
        nome(20) = txtprocesso21.Text

        For j As Integer = 0 To 19
            max = nome(0)
            max_pos = 0
            For i = 0 To 20 - j
                If max < nome(i) Then
                    max = nome(i)
                    max_pos = i

                End If

            Next

            t = nome(max_pos)
            nome(max_pos) = nome(i - 1)
            nome(i - 1) = t

        Next

        txtprocesso1.Text = nome(0)
        txtprocesso2.Text = nome(1)
        txtprocesso3.Text = nome(2)
        txtprocesso4.Text = nome(3)
        txtprocesso5.Text = nome(4)
        txtprocesso6.Text = nome(5)
        txtprocesso7.Text = nome(6)
        txtprocesso8.Text = nome(7)
        txtprocesso9.Text = nome(8)
        txtprocesso10.Text = nome(9)
        txtprocesso11.Text = nome(10)
        txtprocesso12.Text = nome(11)
        txtprocesso13.Text = nome(12)
        txtprocesso14.Text = nome(13)
        txtprocesso15.Text = nome(14)
        txtprocesso16.Text = nome(15)
        txtprocesso17.Text = nome(16)
        txtprocesso18.Text = nome(17)
        txtprocesso19.Text = nome(18)
        txtprocesso20.Text = nome(19)
        txtprocesso21.Text = nome(20)

EDIT: Retirada tag do titulo e pedido de ajuda urgente no texto

Edit2: Alterado titulo para se enquadrar melhor com a questão. - Weasel

Link to comment
Share on other sites

Em primeiro lugar deixa que te diga que as tags [urgente] e frisares que "esperas respostas rápidas" são imediatamente ignoradas por o meu parser biológico. Não acrescentam absolutamente nada à tua dúvida.

Depois, em vez de usares uma array, porque não usas uma, sei lá, List(Of String) por exemplo.

Colecções como List(Of String) já têm built-in o método "Sort" que faz exactamente o que pretendes.

Depois basta consumir item a item, com a índice, semelhante ao que fazes com a array.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Para arrays tb existe o método estático Array.Sort que aceita qq tipo de array, tem o mm comportamento q o sort q o ribeiro referiu.

Espero respostas rápidas visto que amanhã tenho de ter isto pronto. :x

Isto não faz sentido. A ideia do fórum é ajudar quem quer aprender, e a aprendizagem não tem prazo.

Se queres entregar uma coisa só por entregrar, é problema teu, e bem pode ir sem funcionar.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Em relação ao "urgente" e "resposta rápidas" é devido a eu tar a fazer um mini projecto que tem de estar pronto para amanhã.. entendam como quiserem.

Agradeço a ajuda do ribeiro e bruno, mas eu preciso de fazer o código apenas através de arrays não posso "fugir" para outro método.

No que toca a ordenar texto através de arrays tou a 0 !

Podiam dar-me algumas luzes com um código exemplificado para que eu possa resolver a minha dúvida ? =P

Link to comment
Share on other sites

Até 10000 textboxes se fosse necessário.

O que é ordenada é a array e como estás a alimentar as textbox de uma maneira sequencial, bate certo.

Os ciclos devem existir por trás do método Sort, mas isso não nos toca 😛

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Bolas, fazes algo tão simples como isto:

        Dim nome(20) As Integer
        Dim i, max, t, max_pos As Integer

        nome(0) = txtprocesso1.Text
        nome(1) = txtprocesso2.Text
        nome(2) = txtprocesso3.Text
        nome(3) = txtprocesso4.Text
        nome(4) = txtprocesso5.Text
        nome(5) = txtprocesso6.Text
        nome(6) = txtprocesso7.Text
        nome(7) = txtprocesso8.Text
        nome(8) = txtprocesso9.Text
        nome(9) = txtprocesso10.Text
        nome(10) = txtprocesso11.Text
        nome(11) = txtprocesso12.Text
        nome(12) = txtprocesso13.Text
        nome(13) = txtprocesso14.Text
        nome(14) = txtprocesso15.Text
        nome(15) = txtprocesso16.Text
        nome(16) = txtprocesso17.Text
        nome(17) = txtprocesso18.Text
        nome(18) = txtprocesso19.Text
        nome(19) = txtprocesso20.Text
        nome(20) = txtprocesso21.Text

        For j As Integer = 0 To 19
            max = nome(0)
            max_pos = 0
            For i = 0 To 20 - j
                If max < nome(i) Then
                    max = nome(i)
                    max_pos = i

                End If

            Next

            t = nome(max_pos)
            nome(max_pos) = nome(i - 1)
            nome(i - 1) = t

        Next

        Array.Sort(nome)

        txtprocesso1.Text = nome(0)
        txtprocesso2.Text = nome(1)
        txtprocesso3.Text = nome(2)
        txtprocesso4.Text = nome(3)
        txtprocesso5.Text = nome(4)
        txtprocesso6.Text = nome(5)
        txtprocesso7.Text = nome(6)
        txtprocesso8.Text = nome(7)
        txtprocesso9.Text = nome(8)
        txtprocesso10.Text = nome(9)
        txtprocesso11.Text = nome(10)
        txtprocesso12.Text = nome(11)
        txtprocesso13.Text = nome(12)
        txtprocesso14.Text = nome(13)
        txtprocesso15.Text = nome(14)
        txtprocesso16.Text = nome(15)
        txtprocesso17.Text = nome(16)
        txtprocesso18.Text = nome(17)
        txtprocesso19.Text = nome(18)
        txtprocesso20.Text = nome(19)
        txtprocesso21.Text = nome(20)

"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Link to comment
Share on other sites

Ou algo com menos código:

        Dim nome(20) As Integer
        Dim i, max, t, max_pos As Integer

        For I = 0 to 20
             nome(I) = Me.Controls("txtprocesso" & (I + 1)).Text
        Next

        For j As Integer = 0 To 19
            max = nome(0)
            max_pos = 0
            For i = 0 To 20 - j
                If max < nome(i) Then
                    max = nome(i)
                    max_pos = i

                End If

            Next

            t = nome(max_pos)
            nome(max_pos) = nome(i - 1)
            nome(i - 1) = t

        Next

        Array.Sort(nome)

        For I = 0 to 20
             Me.Controls("txtprocesso" & (I + 1)).Text = nome(I)
        Next

Estive agora a olhar com atenção para o teu código, e para que servem as linhas que eu seleccionei? Era onde estavas a tentar ordenar? Se sim isso tudo pode ser apagado.

"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Link to comment
Share on other sites

Creio que está a fazer confusão com algo que podes simplificar..

Utiliza uma ArrayList, adicionas os valores, ordenas, e voltas colocar os valores ordenados..

Ve se percebes:

        Dim arrText As New ArrayList

        arrText.Add(txtprocesso1.Text)
        arrText.Add(txtprocesso2.Text)
        'o resto....

        arrText.Sort()

        txtprocesso1.Text = arrText.Item(0)
        txtprocesso2.Text = arrText.Item(1)
        'o resto....

Making the impossible possible and pwing the world on db at a time.

Link to comment
Share on other sites

Eu sugeri-lhe uma solução semelhante mas recusou.

Parece que tem de ser uma array. Talvez porque seja um exercício e como tal tem de seguir certas linhas.

A meu ver só precisava disto:

'Metes os valores das textboxes para array, uma ordem qualquer
        nome(0) = txtprocesso1.Text
        nome(1) = txtprocesso2.Text
        nome(2) = txtprocesso3.Text
        '(...)

'Ordenas a array e tens desta forma o sorteio ordenado do indice 0 ao maximo
        Array.Sort(nome)

'como a array está ordenada, basta atribuír o indice 0 à textbox1, 1 à textbox2, e por aí fora.
'ficas com as tuas textboxes com as strings previamente ordenadas na array
        txtprocesso1.Text = nome(0)
        txtprocesso2.Text = nome(1)
        txtprocesso2.Text = nome(2)
        '(...)

Mas parece que já está resolvido, e ainda bem 👍

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Mas era a declaração que tava mal !

Em vez de Integer tive de colocar String (devido a eu usar um ciclo for.. next..) e não precisar do Array.Sort apesar de ser mais simples.

Eu tinha obrigatóriamente de usar Arrays e Ciclos  ?

Mas enfim.. Assim ainda aprendi a organizar as text sem usar ciclos  😄

Obrigado pelas ajudas  👍😛👍 :thumbsup:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.