• Domingo 29 de Noviembre de 2020, 09:00

Autor Tema:  Dictionary  (Leído 619 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Dictionary
« en: Miércoles 16 de Diciembre de 2009, 20:23 »
0
Código: C#
  1.  
  2. /*
  3. Contar las veces que aparece cada palabra en una frase.
  4. */
  5.  
  6. using System;
  7. using System.Collections.Generic;
  8.  
  9. public class ContarPalabras
  10. {
  11.     public static void Main()
  12.     {
  13.         Dictionary<string,int> dic = new Dictionary<string,int>();
  14.        
  15.         int cont1=0,cont2=0,cont3=0,cont4=0;
  16.         string frase = "un dos tres dos cuatro un un";
  17.         char[] delimiterChars = { ' ' };
  18.         string[] words = frase.Split(delimiterChars);
  19.        
  20.         for (int i=0;i<words.Length;i++)
  21.         {
  22.             if ( words[i] == "un" )
  23.             {
  24.                 if ( cont1 == 0 )
  25.                     dic.Add(words[i],cont1);
  26.             cont1++;    
  27.             }
  28.             if ( words[i] == "dos" )
  29.             {
  30.                 if ( cont2 == 0 )
  31.                     dic.Add(words[i],cont2);
  32.             cont2++;    
  33.             }
  34.             if ( words[i] == "tres" )
  35.             {
  36.                 if ( cont3 == 0 )
  37.                     dic.Add(words[i],cont3);
  38.             cont3++;    
  39.             }
  40.             if ( words[i] == "cuatro" )
  41.             {
  42.                 if ( cont4 == 0 )
  43.                     dic.Add(words[i],cont4);
  44.             cont4++;    
  45.             }
  46.         }
  47.        
  48.         Console.WriteLine("{0}{1}{2}{3}",cont1,cont2,cont3,cont4);
  49.        
  50.         foreach ( KeyValuePair<string,int> par in dic) //segunda forma
  51.         {
  52.             Console.WriteLine(" Clave          Contador ");
  53.             Console.WriteLine("=========================");
  54.             Console.WriteLine("{0,6}         {1,5}      ",par.Key,par.Value);
  55.             Console.WriteLine();
  56.         }
  57.         Console.ReadKey();
  58.     }
  59.  
  60. }
  61.  
  62.  

Alguien sabe pq antes de entrar al foreach me printa los cont y despues al entrar me los printa con un 0 ?

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Dictionary
« Respuesta #1 en: Lunes 22 de Febrero de 2010, 00:28 »
0
tene en cuenta el codigo:

int primerValor = 2;
int segundoValor = primerValor;
primerValor = 3;
/* en este punto segundoValor no tiene el valor de 3, sino que conserva el valor de 2, puesto que en la asignacion "segundoValor = primerValor" no se le copio la referencia a "primerValor" sino que se copio el objecto entero. esto es debido a que "int" es un "value types" y no un "reference types" como lo es "System.Object" por ejemplo.*

ademas tene en cuenta que antes del foreach imprimis las variables "contX" y desp imprimis lo q tiene el dictionary.
si queres usar el dictionarytendrias que hacer dic[key]++ por ejemplo

saludos.daniel

no me deja pegar links pero pone en el google "value types msdn" que la primera entrada explica ese efecto que experimentas