Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Trabalhando Com Arrays


Lucas Phillip

Pergunta

Ei pessoal, tudo beleza?

Eu estou com o seguinte problema: eu tenho um array de 100 "campos" e quando todos eles estiverem preenchidos, os mais velho será deletado para adicionar um novo.

Mas como eu posso fazer isso sem ter de re-ordenar todo o array passando por item a item?

Ex:

vamos supor que tenho

dim a(3) as integer

ai os valores de a são a(0) = 1, a(1) = 2, a(2) = 3. como eu faço para passar o valor de a(2) para a(1), de a(1) para a(0) e adicionando um novo valor a a(3).

vlw :D

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Hmm.. poderia ate ser.. não tenho muito certeza de como funcionaria... se você puder me dar uma luz :D

de qualquer forma, eu resolvi por enquanto usando um arraylist... ai qd o numero chega ao maximo eu deleto o item(0) e adiciono um novo... só to com medo de fica gastando muito memoria isso...

Link para o comentário
Compartilhar em outros sites

  • 0

Veja um exemplo com uma fila:

Dim máximo As Integer = 10
Dim fila As New Queue(Of Integer)(máximo)
Dim retirado As Integer

For i As Integer = 1 To 15
    If fila.Count = máximo Then
        retirado = fila.Dequeue()
        Debug.Print("Retirado: " & retirado)
    End If
    fila.Enqueue(i)
    Debug.Print("Incluído:" & i)
Next

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sem dúvida, em termos de performance, a ArrayList sai perdendo. Isso porque ela não é tipada (tudo que é adicionado é Object) e consequentemente perde no tempo de acesso. Já uma coleção tipada (como uma List(Of T) ou uma Queue(Of T)) tem uma performance muito melhor porque lida com o tipo especificado. Veja um teste que fiz aqui:

Dim máximo As Integer = 1000
Dim fila As New Queue(Of Integer)(máximo)
Dim alista As New ArrayList(máximo)
Dim lista As New List(Of Integer)(máximo)
Dim retirado As Integer
Dim tempoInicial As TimeSpan
Dim tempoFinal As TimeSpan

tempoInicial = Now.TimeOfDay
For i As Integer = 1 To 10000
    If fila.Count = máximo Then
        retirado = fila.Dequeue()
    End If
    fila.Enqueue (i)
Next
tempoFinal = Now.TimeOfDay
Debug.Print("Tempo (queue):" & (tempoFinal - tempoInicial).Milliseconds)

tempoInicial = Now.TimeOfDay
For i As Integer = 1 To 10000
    If alista.Count = máximo Then
        alista.RemoveAt (0)
    End If
    alista.Add (i)
Next
tempoFinal = Now.TimeOfDay
Debug.Print("Tempo (arraylist):" & (tempoFinal - tempoInicial).Milliseconds)

tempoInicial = Now.TimeOfDay
For i As Integer = 1 To 10000
    If lista.Count = máximo Then
        lista.RemoveAt (0)
    End If
    lista.Add (i)
Next
tempoFinal = Now.TimeOfDay
Debug.Print("Tempo (list):" & (tempoFinal - tempoInicial).Milliseconds)

Os resultados em relação a ArrayList variam (foram de 15 a 31 milissegundos), mais a fila permaneceu sempre em 0 e a lista em 15. Ou seja, a fila (Queue) é a melhor opção em performance.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...