Aquí está mi código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test1
{
    class Program
    {

        static void Main(string[] args)
        {
            var lines = File.ReadAllLines(@"C:/temp/TextFile.txt").Select(x => x.Split('/')).FirstOrDefault();
            var words = new Dictionary<string, string>();

            for (int i = 0; i < lines.Length - 1; i += 2)
            {
                words.Add(lines[i], lines[i + 1]);
            }

            Console.WriteLine(words);
            Console.ReadKey();
        }
    }
}

Cuando lo ejecuto, aparece: "System.Collections.Generic.Dictionary`2 [System.String, System.String]"

¿Alguien puede decirme cómo arreglar este código o si conoce una forma mejor de hacer lo que estoy tratando de hacer?

-Gracias

3
CodeNoob 21 feb. 2018 a las 04:18

2 respuestas

La mejor respuesta

Prueba esto

var words = File.ReadAllLines(@"C:/temp/TextFile.txt")
                .Select(x => x.Split('/'))
                .Where(x => x.Length == 2)
                .ToDictionary(x => x[0], x => x[1]);

Lee el archivo y lo divide como lo hace actualmente. El where simplemente comprueba que sea un par y que no haya más / menos elementos (para evitar una excepción en el caso de este último). Finalmente, lo convierte en diccionario.

No estoy seguro de lo que quiere hacer con respecto a escribirlo. La sugerencia de juharr en los comentarios debería funcionar:

Console.WriteLine(string.Join(Environment.NewLine, words.Select(kvp=>kvp.Key + ":" + kvp.Value)));

O puede recorrer cada par:

foreach (var pair in words)
{
    Console.WriteLine(pair.Key + ":" + pair.Value);
}
3
John 21 feb. 2018 a las 01:29

Lo está haciendo todo bien, excepto por intentar imprimir un diccionario completo en una línea de código.

En su lugar, puede imprimir la palabra a medida que la agrega al diccionario, o puede hacer un bucle foreach en el objeto del diccionario para imprimir cada par clave-valor, o puede escribir un método de ayuda / extensión para manejar WriteLine en un diccionario.

Aquí el escenario 1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test1
{
    class Program
    {

        static void Main(string[] args)
        {
            var lines = File.ReadAllLines(@"C:/temp/TextFile.txt").Select(x => x.Split('/')).FirstOrDefault();
            var words = new Dictionary<string, string>();

            for (int i = 0; i < lines.Length - 1; i += 2)
            {
                words.Add(lines[i], lines[i + 1]);
                Console.WriteLine(string.Format("{0} - {1}", lines[i], lines[i + 1]));
            }

            //Console.WriteLine(words);
            Console.ReadKey();
        }
    }
}

Aquí está el escenario 2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test1
{
    class Program
    {

        static void Main(string[] args)
        {
            var lines = File.ReadAllLines(@"C:/temp/TextFile.txt").Select(x => x.Split('/')).FirstOrDefault();
            var words = new Dictionary<string, string>();

            for (int i = 0; i < lines.Length - 1; i += 2)
            {
                words.Add(lines[i], lines[i + 1]);
            }

            foreach (var kvp in words)
            {
                Console.WriteLine(string.Format("{0} - {1}", kvp.Key, kvp.Value));
            }
            Console.ReadKey();
        }
    }
}

Aquí está el escenario 3:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test1
{
    class Program
    {

        static void Main(string[] args)
        {
            var lines = File.ReadAllLines(@"C:/temp/TextFile.txt").Select(x => x.Split('/')).FirstOrDefault();
            var words = new Dictionary<string, string>();

            for (int i = 0; i < lines.Length - 1; i += 2)
            {
                words.Add(lines[i], lines[i + 1]);
            }

            PrintDictionary(words);
            Console.ReadKey();
        }

       static void PrintDictionary(Dictionary<string,string> dict)
       {
           foreach (var kvp in dict)
            {
                Console.WriteLine(string.Format("{0} - {1}", kvp.Key, kvp.Value));
            }
       }
    }
}
1
TuneNCode 21 feb. 2018 a las 01:31