Objet au hasard d'une collection

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 969 fois - Téléchargée 28 fois

Contenu du snippet

Cet astuce vous permettra de sortir un objet au hasard d'une collection

Prenons par exemple une classe Humain qui a pour code :

Private Class Humain
Public Nom As String

Public Sub New(ByVal NomHumain As String)
Me.Nom = NomHumain
End Sub

End Class

Maintenant vous avez une société donc plusieurs Humain vous décidez donc de faire une collection d'Humain que vous nommez naturellement HumainCollection. Le code ressemble à ca :

Private Class HumainCollection
Inherits CollectionBase

Default ReadOnly Property Item(ByVal index As Int32) As Humain
Get
Return CType(Me.List.Item(index), Humain)
End Get
End Property

Public Function Add(ByVal Humain As Humain) As Humain
Me.List.Add(Humain)
Return Humain
End Function

End Class

j'ai ajouté la possibilité de rajouter des humains, et la propriété item, pour info de faire hériter notre classe faisait que les propriétés Count Clear GetEnumerator et RemoveAt

pour l'instant rien d'extraordinaire, ceux qui ont lu "Au coeur de Visual Basic.net" de Richard Clark (c2i.fr) verrons que je sors pas mes exemples au hasard (mais ca reste un excellent livre que je vous conseil).

Mais imaginons maintenant que vous vouliez prendre un Humain au hasard de votre classe.

pour cela modifions un peu le code de HumainCollection

Private Class HumainCollection
Inherits CollectionBase

Default ReadOnly Property Item(ByVal index As Int32) As Humain
Get
Return CType(Me.List.Item(index), Humain)
End Get
End Property

Public Function Add(ByVal Humain As Humain) As Humain
Me.List.Add(Humain)
Return Humain
End Function

Public Function Randomize() As Humain
If Not Me.Count = 0 Then
Dim Hasard As New Random
Dim i As Integer = Hasard.Next(0, Me.Count)
Return CType(Me.List.Item(i), Photo)
End If
End Function

End Class

j'ai rajouté la function Randomize, celle ci retourne un humain qui bien sur trié au hasard de la collection

Le code de cette function est assez simple donc je ne l'explique pas.

donc maintenant une fois que l'on a notre collection d'humain, pour avoir un humain au hasard il suffit de faire

Dim Societe as new HumainCollection
Societe.Add(new Humain("Cyril"))
Societe.Add(new Humain("Astrid"))

...

Dim UnHumain As Humain = Societe.Randomize

MAJ :
[22.06.2004] Correction : si la collection est vide sa retournait une erreur

Source / Exemple :


Private Class HumainCollection
        Inherits CollectionBase

        Public Function Randomize() As Humain
            If Not Me.Count = 0 Then
                Dim Hasard As New Random
                Dim i As Integer = Hasard.Next(0, Me.Count)
                Return CType(Me.List.Item(i), Photo)
            End If
        End Function

    End Class

Conclusion :


J'attend vos commentaires

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
à 1 en VB6
pheniximmortel
Messages postés
2
Date d'inscription
mardi 26 septembre 2006
Statut
Membre
Dernière intervention
12 février 2007

Une collection ne commence pas a 1 plutôt que a 0?

Hasard.Next(0, Me.Count)

Sinon sympa le code.
cs_simoneo
Messages postés
20
Date d'inscription
samedi 4 novembre 2006
Statut
Membre
Dernière intervention
29 juin 2008

Bon code.
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
voir section "source" ci dessus...

faut lire, avant de noter a tout va
cs_ABF
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012

Elle est ou la collection ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.