|
101
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ordenar listbox ??
|
en: 25 Marzo 2016, 18:21 pm
|
Lo estás haciendo todo al revés Luis, primero estás obteniendo una coleccion con sub-colecciones por elementos ( IEnumerable(Of IEnumerable(Of Integer)) ), luego, por cada sub-colección, unes todos los sub-elementos en un string con String.Join(), luego, ese string, el cual contiene la representación de cada sub-colección con saltos de linea, lo partes por un salto de linea ( colección.Split({Environment.NewLine}) ) para obtener de nuevo una colección que insertar en el listbox... y ahora, quieres volver a convertir los elementos del Listbox en un array de enteros para eliminar duplicados. No se si me he equivocado en algún paso del procedimiento, por que ya solo de pensarlo es un completo lio lo que estás haciendo, tanta conversión de array a string, y viceversa, DEJA DE HACER ESO. Si quieres eliminar duplicados, entonces hazlo en el momento en el que construyes la colección de combinaciones, NO despues de haberla transformado en no se cuantos tipos de objetos ya . Mi consejo: Intenta hacer un buen planteamiento de la lógica antes de escribir ningún código, por que luego acabarás con necesidades como esta, me refiero a tener que hacer algo en un paso del proceso en el que ya deberias haberlo hecho... no se si me explico. Create un Type que herede de una colección genérica, llamemoslo CombinationCollection, y úsalo parra almacenar las combinaciones. Para representar los valores o combinaciones, en un string, podrías utilizar un proveedor de formato personalizado, es decir, una class que implemente la interface IFormatProvider y ICustomFormatter (el cual usarias como formato personalizado en el método String.Format()). O simplemente suplantar el método ToString en tu type personalizado. Es mucho trabajo, como para mostrarte ejemplos de todo, pero en MSDN los puedes encontrar. Saludos! Hola bueno Elektro sabes que me baso mucho en tus modelos jejej y por supuestos tus consejos ya que te has pasado con la ayuda que me has dado, pero ciertas cosas son chinas para mi jejje,me acostumbre a trabajar con un tipo de variable y me vuelvo un lio cuando se cambia de modo, por eso es que trato de llevar al terreno que conozco las cosas. lo que pasa es que no quiero tocar tu código, me gustaría resolverlo mas facil y para mi seria poder limpiar el listbox de los resultados duplicados después que estén hechos, ya sabes que cada quien le tiene una idea especifica a cada cosa y me interesa que tu codigo quede de esa manera.ya que códigos de combinaciones y permutas hay miles jejeje pero no es lo que busco. saludos Luis
|
|
|
102
|
Programación / .NET (C#, VB.NET, ASP) / Re: Ordenar listbox ??
|
en: 25 Marzo 2016, 18:10 pm
|
Hola puedes revisar esta posible solucion Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim list As New List(Of String) Dim i As Integer For i = 0 To ListBox1.Items.Count - 1 list.Add(ListBox1.Items(i)) Next i ListBox1.Items.Clear() For Each s As String In list.Distinct ListBox1.Items.Add(s) Next End Sub End Class
Gracias por tu ayuda pero no me elimina ,primero hay que ordenarlos para poder eliminar todas las lineas iguales son muchos registros saludos Luis
|
|
|
103
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 18:00 pm
|
Jjejeje no se cuando aprendí hablar chino 我不明白的貓 A ver lekim estoy usando este código, los tuyos los tengo reservados a otros proyecto que se me ocurren por cierto me parecen estupendos ,pero estoy usando el código de Elektro este código me entrega los números a si. y supongamos que voy a jugar a la lotería .como dices son no se cuantos millones de apuestas pero te equivocas en la primitiva ahora son mas millones ya ahora es 6+complementario eso te multiplica la ostia Para que necesito hacer apuestas donde los números se repiten ? estaríamos formando realmente apuestas iguales si ordenamos los números de cada linea de menor a mayor.veremos que se repiten muchos registros por ende. es lo que quiero eliminar todos los que tienen asterisco ya que son combinaciones iguales pero en diferente orden asi es como me entrega AHORA este codigo los resultados 20, 24, 34*** 20, 24, 37 20, 34, 24*** 20, 34, 37 20, 37, 24 20, 37, 34**** 24, 20, 34 24, 20, 37 24, 34, 20 24, 34, 37 24, 37, 20 24, 37, 34 34, 20, 24 34, 20, 37 34, 24, 20*** 34, 24, 37 34, 37, 20 34, 37, 24 37, 20, 24**** 37, 20, 34 37, 24, 20 37, 24, 34 37, 34, 20 37, 34, 24 Simplemente quiero dejar números, registros o lineas únicas Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol From value2 As Integer In intCol Select String.Join(Environment.NewLine, ( From value3 As Integer In intCol Where (value1 <> value2) AndAlso (value1 <> value3) AndAlso (value2 <> value3) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ' MsgBox(pairs.Count) ' MsgBox(line1.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
Luis
|
|
|
104
|
Programación / .NET (C#, VB.NET, ASP) / Ordenar listbox ??
|
en: 25 Marzo 2016, 15:29 pm
|
Tengo un listbox que tiene registros de esta forma 20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 24 20, 34, 44 20, 45 ,24 necesito ordenarlos para saber cuantas lineas son iguales y haci poder eliminar duplicados explico: si ordenamos los números de arriba estos quedarían así ordenados vemos que se repiten 20, 24, 34 20, 24, 44 20, 24, 45**** 20, 24, 34**** 20, 34 ,45 20, 24, 45 *** tengo este código pero lo ordena de menor a mayor Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click ListBox1.Sorted = True ListBox1.Sorted = False Dim i As Integer Dim count = ListBox1.Items.Count For i = ListBox1.Items.Count - 1 To 0 Step -1 ListBox1.Items.Add(ListBox1.Items(i)) Next For i = 0 To count - 1 ListBox1.Items.RemoveAt(ListBox1.SelectedItem) Next End Sub
alguna sugerencia o ejemplos que pueda conseguir Luis
|
|
|
105
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 25 Marzo 2016, 09:49 am
|
Hola Luis Ya te comenté lo de meter la lista en un Array list: Dim Elementos() As String = {1, 2, 3, 3, 3, 4, 4, 5} Dim LISTA As New List(Of String)(Elementos) MsgBox("Con repeticiones") For Each N As String In LISTA ListBox1.Items.Add(N) Next MsgBox("Sin repeticiones") ListBox1.Items.Clear() LISTA = LISTA.Distinct.ToList '<---Elimina las repeticones de la lista For Each N As String In LISTA ListBox1.Items.Add(N) Next
Con integer: Dim Elementos() As Integer = {1, 2, 3, 3, 3, 4, 4, 5} Dim LISTA As New List(Of Integer)(Elementos) MsgBox("Con repeticiones") For Each N As String In LISTA ListBox1.Items.Add(N) Next MsgBox("Sin repeticiones") ListBox1.Items.Clear() LISTA = LISTA.Distinct.ToList '<---Elimina las repeticones de la lista For Each N As String In LISTA ListBox1.Items.Add(N) Next
Hola y gracias ,bueno esto solo funciona con la cadena propia que me muestras Dim Elementos() As String = {1, 2, 3, 3, 3, 4, 4, 5} Dim LISTA As New List(Of String)(Elementos)
y yo busco es aplicarlo a los resultados que me da : For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray ' MsgBox(pairs.Count) ' MsgBox(line.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
Donde se supone que los datos dentro del listbox es LINE el cual no encuentro la manera de pasarlos a un array y ya he probado de todo ;( Luis
|
|
|
106
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 24 Marzo 2016, 11:01 am
|
puedes detallar un poco mas lo que quieres hacer?
Bueno analizando el problema , lo que quiero es ordenar los registros y eliminar los coincidentes ahora me los entrega de esta forma desordenado deberian estar por oden de menor a mayor 20, 24, 34 20, 24, 37 20, 34, 24 20, 34, 37 para poder eliminar iguales se debería de ordenar primero el orden de los registros 20, 24, 34 20, 24, 37 20, 24, 34********* 20, 34, 37********* Para eliminar los que están marcados con * For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray ' MsgBox(pairs.Count) ' MsgBox(line.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
Estoy tratado de convertir la variable antes de llenar el testbox Pero cuando trato de hacerlo con (Line) me dice error "Ya no se admiten instrucciones 'Line'." ???? estoy mas enredado Luis
|
|
|
108
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 23 Marzo 2016, 15:15 pm
|
De todas formas, tengo una sorpresita para ti. Ayer te mencioné lo del desarrollo de la función de permutaciones (ya no se si quieres combinaciones o permutaciones, pero esto viene al caso igualmente), al final he acabado haciendo un puerto para Vb.Net de la librería Combinatronics, la cual tiene un código fuente que es una delicia: Aun no he terminado de finalizar el código fuente, pero igualmente puedes usar ese en C#. Solo tienes que descargarlo desde GitHub y compilarlo en Visual Studio, se generará una librería "Combinatronics.dll", referencias esa dll en tu proyecto de Vb.Net, y listo. Modo de empleo: Dim permutations As New Permutations(Of Integer)({3, 1, 10}, MetaCollectionType.WithoutRepetition) MsgBox(String.Format("Permutaciones: {0}", permutations.Count)) For Each permutation As List(Of Integer) In permutations Console.WriteLine(String.Join(", ", permutation)) Next permutation
PD: Si esto no resuelve los problemas con combinaciones/permutaciones ...yo no se que más puedes necesitar ya xD. Saludos! Gracias por tu tiempo y GRAN PACIENCIA jejejje lo que necesito es crear un sistema de Combinaciones pero no busco lo normal jejejje busco algo diferente pero en combinaciones únicas ya que codigos de combinaciones hay miles pero son lo basico y normal jejje con eso no se llega a donde quiero ir , las permutas no me valen para lo que busco te puse lo que me gustaría poder hacer a ver si se puede, sin modificar la funcion del codigo ,solo en el resultado Luis
|
|
|
109
|
Programación / .NET (C#, VB.NET, ASP) / Re: Mas problemas :( filtrar o eliminar registros iguales
|
en: 23 Marzo 2016, 15:03 pm
|
Bueno aca esta la lista completa como me lo entrega ahora .esto esta haciedo permutaciones pero no quiero modificar el codigo ya que le tengo otras ideas jejej solamente quiero dejar una combinacion de cada uno.esto es quitar toda cambinaciones que tengan o coincidan los mismos tres numeros en diferente orden.
ideas pasar esta lista a una variable donde elimine antes de mostrar en el listbox .
ahora esta es la salida como me la muestra.
20, 24, 34 20, 24, 37 20, 34, 24 20, 34, 37 20, 37, 24 20, 37, 34 24, 20, 34 24, 20, 37 24, 34, 20 24, 34, 37 24, 37, 20 24, 37, 34 34, 20, 24 34, 20, 37 34, 24, 20 34, 24, 37 34, 37, 20 34, 37, 24 37, 20, 24 37, 20, 34 37, 24, 20 37, 24, 34 37, 34, 20 37, 34, 24
quiero ir eliminando las combinaciones iguales porque si se mira bien. veras que hay combinaciones que son iguales. solo que cambian las posiciones de los números.
debería quedar asi 20, 24, 34 20, 24, 37 20, 34, 37 24, 34, 37
Luis
|
|
|
110
|
Programación / .NET (C#, VB.NET, ASP) / Mas problemas :( filtrar o eliminar registros iguales
|
en: 23 Marzo 2016, 11:45 am
|
Esto no acaba nunca Esto ya funciona pero me repite las combinaciones y necesito números o combinaciones únicas ya que 1, 2, 3 es lo mismo que 3, 2, 1 o 2, 1, 3... solo debe quedar uno de ellos he probado con poner " .Distinct().ToArray " pero como siempre Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 37} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol From value2 As Integer In intCol Select String.Join(Environment.NewLine, ( From value3 As Integer In intCol Where (value1 <> value2) AndAlso (value1 <> value3) AndAlso (value2 <> value3) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray ' MsgBox(pairs.Count) ' MsgBox(line.Count) Me.ListBox1.Items.Add(line) Next line Next pairs End Sub
salida 20, 24, 34*** 20, 24, 37 20, 34, 24*** 20, 34, 37 20, 37, 24 20, 37, 34**** 24, 20, 34 24, 20, 37 24, 34, 20 24, 34, 37 24, 37, 20 24, 37, 34 34, 20, 24 34, 20, 37 34, 24, 20*** 34, 24, 37 34, 37, 20 34, 37, 24 37, 20, 24**** 37, 20, 34 37, 24, 20 37, 24, 34 37, 34, 20 37, 34, 24 si os dais cuenta las combinaciones se repiten pero con el orden de los numeros cambiados como podria dejar solo una de ellas ??? Luis
|
|
|
|
|
|
|