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