Asumamos:¿Cuál es la forma más concisa de elegir un elemento aleatorio por peso en C#?
List<element>
qué elemento es:
public class Element(){
int Weight {get;set;}
}
Lo que quiero lograr es, seleccione un elemento al azar por el peso. Por ejemplo:
Element_1.Weight = 100;
Element_2.Weight = 50;
Element_3.Weight = 200;
Así
- la oportunidad
Element_1
fue seleccionado es 100/(100 + 50 + 200) = 28,57% - la oportunidad
Element_2
fue seleccionado es 50/(100 + 50 + 200) = 14,29% - la ocasión fue seleccionado
Element_3
es de 200/(100 + 50 + 200) = 57,14%
Sé que puedo crear un bucle, calcular el total, etc ...
Lo que quiero aprender es cuál es la mejor manera de hacer esto con Linq en UNA línea (o lo más corto posible), gracias.
ACTUALIZACIÓN
encontré mi respuesta a continuación. Lo primero que aprendo es: Linq NO es mágico, es más lento que el ciclo bien diseñado.
Así que mi pregunta es encontrar un elemento aleatorio en peso, (sin lo más corto posible cosas :)
¿Quiere código corto, pero no le importa que sea lento? – CodesInChaos
no no, sé que el ciclo es lento, así que quiero usar Linq, debería ser más rápido. No es muy corto, simplemente no es tan complejo como usar loop y loop nuevamente. Puedo obtener imágenes de lo que puedo hacer es: 1: obtener total, 2: aleatorio del total 3: obtener un elemento en el rango ... bastante complejo y lento, supongo que –
Linq será más lento que el código basado en bucle. Si desea un código rápido, necesita calcular previamente en 'O (n)' para que pueda realizar una búsqueda 'O (1)'. Pero el código para eso será relativamente complejo. – CodesInChaos