更新了:明确了
我的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的值
答案 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();
这里有一些要指出的好事。
List
,稍后将其转换为数组。如果您不需要数组,您甚至不必这样做:您可以使用该列表。行character += lineParts[0]
并不理想:它会创建额外的String对象,然后必须将其丢弃。相反,我们可以使用StringBuilder
:
var characterBuilder = new StringBuilder();
...
characterBuilder.Append(lineParts[0]);
...
character = characterBuilder.ToString();
随着文件变大,这变得更加相关。
<强>更新强>
如果你想创建一个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来指定要生成的最大部件数。