EMBARALHAR ITENS
Olá pessoal, Boa Tarde!
Gostaria de embaralhar uma lista pelo indice dos itens. Alguem poderia me ajudar nessa?
ex: dim baralho as new list(of carta)
baralho.embaralhar()
vlw
Gostaria de embaralhar uma lista pelo indice dos itens. Alguem poderia me ajudar nessa?
ex: dim baralho as new list(of carta)
baralho.embaralhar()
vlw
Quais as propriedades do objeto [Ô]carta[Ô]?
KerpLunk, nesse caso eu acho que nem precisa saber quais são as propriedades do obj carta, pois eu quero embaralhar as cartas pelo indice que ele está inserido na lista não pelo conteúdo das propriedades, mas vou te passar mesmo assim. As propriedades do obj carta são: Nipe e Valor.
Agradeço pela atenção.
vlw
Agradeço pela atenção.
vlw
Baseado no algorÃtmo de Fisher-Yates:
<System.Runtime.CompilerServices.Extension> _
Public Shared Sub Embaralhar(Of T)(list As IList(Of T))
Dim rng As New Random()
Dim n As Integer = list.Count
While n > 1
n -= 1
Dim k As Integer = rng.[Next](n + 1)
Dim value As T = list(k)
list(k) = list(n)
list(n) = value
End While
End Sub
Para usar:
Dim cartas As List(Of Carta) = Getcartas() [ô]ou qualquer outra coisa que preencha a lista de cartas
cartas .Embaralhar()
Tenha em mente que isto é um método de extensão.
<System.Runtime.CompilerServices.Extension> _
Public Shared Sub Embaralhar(Of T)(list As IList(Of T))
Dim rng As New Random()
Dim n As Integer = list.Count
While n > 1
n -= 1
Dim k As Integer = rng.[Next](n + 1)
Dim value As T = list(k)
list(k) = list(n)
list(n) = value
End While
End Sub
Para usar:
Dim cartas As List(Of Carta) = Getcartas() [ô]ou qualquer outra coisa que preencha a lista de cartas
cartas .Embaralhar()
Tenha em mente que isto é um método de extensão.
Vou testar quando chegar em casa. Pelo que analisei aqui, parece perfeito. Porém, Já que se trata de um método de extensão, vou ter que colocar isso dentro de um módulo, não é isso?
Eu tinha feito algo parecido e minha intenção era mesmo saber se já existia um codigo nativo do .net para isso. No java acho que existe o metodo chamado Shuffle que faz isso. No .net eu não achei essa implementação. Pelo visto, não deve existir mesmo não. Eu até tentei fazer essa parte implementando a interface IComparer, mas ele só ordena pela propriedade atribuida e não embaralha pelo indice dos itens.
Kerplunk, Muito obrigado pela ajuda.
vlw
Eu tinha feito algo parecido e minha intenção era mesmo saber se já existia um codigo nativo do .net para isso. No java acho que existe o metodo chamado Shuffle que faz isso. No .net eu não achei essa implementação. Pelo visto, não deve existir mesmo não. Eu até tentei fazer essa parte implementando a interface IComparer, mas ele só ordena pela propriedade atribuida e não embaralha pelo indice dos itens.
Kerplunk, Muito obrigado pela ajuda.
vlw
Citação:Já que se trata de um método de extensão, vou ter que colocar isso dentro de um módulo, não é isso?
Não. Coloque dentro de uma classe e inclua a diretiva(Imports Namespace.NomeClasse) dessa classe onde quer que você queira usar esse método.
Tópico encerrado , respostas não são mais permitidas