Shell   11-12-2021, 12:25
#1
Buenas!.

Después de ver un ejemplo con Python, busqué algún método para rellanar un array con palabras repetidas.
Encontré el método "Fill", pero este método necesita que el array tenga dimensiones.

No puedes hacer algo como:

Código:
Dim dulces as new String[]

dulces.fill("galletas",comienza desde aquí, rellena n veces el array con la palabra "galletas")
'O también
dulces.fill("galletas", rellena n veces el array con la palabra "galletas")

Y estuve probando distintas maneras de hacerlo. A ver si ustedes conocen una forma mejor que las de abajo.
Hice un test a ver cual era la más rápida.

Código:
Public Sub Main()
 
  Randomize
 
  TestBenchMark("LlenarArray")
  TestBenchMark("LlenarArray2")
  TestBenchMark("LlenarArray3")
 
End

Public Sub TestBenchMark(nombrefuncion As String)
 
  Dim i, t As Float
  Dim afinal As String[]
  Dim ob As Object
  Dim palabras As String[] = ["galletas", "merenges"]
  Dim palabra As String
  Dim veces As Integer
 
  ob = Me
 
  t = Timer
  afinal = New String[]  
  For i = 1 To 10 ^ 6     
    palabra = palabras[Rand(0, palabras.Max)]
    veces = Rand(1, 10)
    If nombrefuncion <> "LlenarArray2" Then
      afinal = Object.Call(ob, nombrefuncion, [afinal, palabra, veces])    
    Else
      afinal.Insert(Object.Call(ob, nombrefuncion, [palabra, veces]))
    Endif
  Next
 
  Print "Tiempo para 10^6 repeticiones, método: " & nombrefuncion & " = " & "\t"; Format(Timer - t, "0.######") & "s"
    
End


Public Function LlenarArray(apalabras As String[], palabra As String, veces As Integer) As String[]

  Dim cadenaconrepeticiones As String

  cadenaconrepeticiones = String(veces, palabra & " ")
  apalabras.Insert(Split(cadenaconrepeticiones, " ", "'", True))

  Return apalabras

End

Public Function LlenarArray2(palabra As String, veces As Integer) As String[]
 
  Dim apalabras As New String[]

  apalabras.Resize(veces)
  apalabras.Fill(palabra)
  Return apalabras

End

Public Function LlenarArray3(apalabras As String[], palabra As String, veces As Integer) As String[]

  If apalabras.Count = 0 Then
    apalabras.Resize(veces)
    apalabras.Fill(palabra)
  Else
    apalabras.Resize(apalabras.Count + veces)
    apalabras.Fill(palabra, apalabras.Count - veces, veces)
  Endif
 
  Return apalabras

End

La respuesta fue:
 
Cita:Tiempo para 10^6 repeticiones, método: LlenarArray =    1,245407s
Tiempo para 10^6 repeticiones, método: LlenarArray2 =   0,960382s
Tiempo para 10^6 repeticiones, método: LlenarArray3 =   0,80571s


Os adjunto el ejemplo:

Saludos
Archivos adjuntos
.gz
LlenadoDeArray-0.0.1.tar.gz (Tamaño: 12.34 KB Descargas: 2)

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema:
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.