C# 如何读取文件并制作哈希映射

C# 如何读取文件并制作哈希映射,c#,C#,更新:澄清 我有一个txt文件,看起来像这样 a [456545324553645,43456765676564,62644456374,65768475336846,...] b [3445324553645,4546465676564,07674456374,0906847534657,...] c [21245324553645,43456765676564,62644456374,6576847534657,...] d [133426545324553645,4345676567656

更新:澄清

我有一个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 这意味着我想在字符串变量中存储char作为Hashmap的键
并将数字存储在字符串[]中作为哈希映射的值

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

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();
随着文件变大,这一点变得更加重要

更新

如果要创建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];
        }
}
var numbers=newdictionary();
使用(var file=file.OpenText(pathToFile))
{
而(!file.EndOfStream)
{
var lineParts=file.ReadLine().Split(“.ToCharArray(),2);//围绕空格字符拆分行
编号[lineParts[0]]=lineParts[1];
}
}

您会注意到,我使用的是另一个重载
string.Split
。它接受一个整数,指定要生产的最大零件数。

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

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();
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();
随着文件变大,这一点变得更加重要

更新

如果要创建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];
        }
}
var numbers=newdictionary();
使用(var file=file.OpenText(pathToFile))
{
而(!file.EndOfStream)
{
var lineParts=file.ReadLine().Split(“.ToCharArray(),2);//围绕空格字符拆分行
编号[lineParts[0]]=lineParts[1];
}
}


您会注意到,我使用的是另一个重载
string.Split
。它需要一个整数来指定要生产的零件的最大数量。

到目前为止您完成了什么,您需要什么帮助?那么以您的示例为例,您希望结果是
string first={'a',b',…}
string[]second={“456545324564534253645”,“56435675332567654375”,“…}
?@IvanGritsenko yup这正是我想要的到目前为止你已经完成了什么,你需要什么帮助?那么以你的例子来说,你希望结果是
string first={'a','b',…}
string[]second={“456545324564534253645”,“5643566745332567654375”,“…}
?@IvanGritsenko是的,我认为它应该在字符串[]allNumbers=results中添加数组。选择(r=>r.Number)。数组?不管怎样,谢谢work@Basil正确,修复了它,谢谢。我认为它应该在字符串[]allNumbers=results.Select(r=>r.Number)中添加toArray。toArray?不管怎样,谢谢work@Basil正确,修正了,谢谢。非常感谢你的回答和详细解释这句话的意思?编号[lineParts[0]]=lineParts[1];这意味着,使用键
lineParts[0]
将字典中的条目设置为
lineParts[1]
lineParts[0]
将是第一个字符,
lineParts[1]
将是该行的其余部分。再次感谢,如果我在开始时混淆了您,很抱歉。在这种情况下,请将字典创建为
dictionary
,并使用
linePart[1]。Trim([])。Split(',')
作为值,等等,你有你的hashmap。非常感谢你的回答和详细解释这行的意思?编号[lineParts[0]]=lineParts[1];这意味着,使用键
lineParts[0]
将字典中的条目设置为
lineParts[1]
lineParts[0]
将是第一个字符,
lineParts[1]
将是行的其余部分。再次感谢,如果我一开始就把您搞糊涂了,很抱歉。在这种情况下,请将字典创建为
dictionary
,并使用
linePart[1]。Trim([])。Split(',')
作为值,等等,您有了hashmap。
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();