如何从文件中读取并制作HashMap

时间:2016-03-09 16:40:18

标签: c#

更新了:明确了

我的txt文件看起来像这样

a [456545324553645,43456765676564,62644456374,65768475336846,...]
b [3445324553645,4546465676564,07674456374,0906847534657,...]
c [21245324553645,43456765676564,62644456374,6576847534657,...]
d [133426545324553645,43456765676564,62644456374,6576847534657,...]
f [1243545324553645,43456765676564,62644456374,6576847534657,...]
g [356545324553645,43456765676564,62644456374,6576847534657,...]

我想读取文件并制作HashMap 这意味着我想将String变量中的char存储为Hashmap的Key 并将数字存储在String []中作为Hash-map的值

2 个答案:

答案 0 :(得分:4)

var lines = File.ReadAllLines("filename.txt");

var results = lines.Select(line => line.Split(' '))
                   .Select(split => new { Character = split[0], Number = split[1] });

// this is your data, now you can play with it

string allChars = string.Join(string.Empty, results.Select(r => r.Character));
string[] allNumbers = results.Select(r => r.Number).ToArray();

答案 1 :(得分:1)

您需要读取文件的每一行,将其拆分为两行,然后将每个部分添加到需要的位置。

string character = "";
string[] numbers; //to be calculated at later

var numberList = new List<string>() // for ease of adding values

using(var file = File.OpenText(pathToFile))
{
        while (!file.EndOfStream)
        {
            var lineParts = file.ReadLine().Split(' '); //split line around space characters
            character += lineParts[0];
            numberList.Add(lineParts[1]);
        }
}

numbers = numberList.ToArray();

这里有一些要指出的好事。

  1. 我们不知道文件有多大(可能是数千行),所以我们不要一次读完整个文件,而是只读取你需要的一次,在这种情况下,单行。
  2. 我们不是直接添加到阵列。由于上述原因,我们无法轻易计算出有多少行,因此我们不能说阵列需要多大。相反,我们添加到List,稍后将其转换为数组。如果您不需要数组,您甚至不必这样做:您可以使用该列表。
  3. character += lineParts[0]并不理想:它会创建额外的String对象,然后必须将其丢弃。相反,我们可以使用StringBuilder

    var characterBuilder = new StringBuilder();
    
    ...
    
    characterBuilder.Append(lineParts[0]);
    
    ...
    
    character = characterBuilder.ToString();
    

    随着文件变大,这变得更加相关。

  4. <强>更新

    如果你想创建一个hashmap,最好从头开始创建它:

    var numbers = new Dictionary<string, string>();
    
    using(var file = File.OpenText(pathToFile))
    {
            while (!file.EndOfStream)
            {
                var lineParts = file.ReadLine().Split(" ".ToCharArray(), 2); //split line around space characters
                numbers[lineParts[0]] = lineParts[1];
            }
    }
    

    你会注意到我正在使用string.Split的不同重载。它需要一个int来指定要生成的最大部件数。