C# 从文本文件读入列表

C# 从文本文件读入列表,c#,list,C#,List,我需要一些帮助。基本上,我在文本文件中有一段文本,我需要将文本文件(存储为字符串)读入字符列表,并存储它们在字符串中出现的时间。因此,它将生成一个介于(a-Z)之间的列表,并根据字符出现的次数对其排序。有没有一种不使用LINQ的方法可以做到这一点 谢谢:)您可以使用哈希表来完成此操作 Hashtable listofChars = new Hashtable(); for () { // your loop for the chars in the file Char c ;

我需要一些帮助。基本上,我在文本文件中有一段文本,我需要将文本文件(存储为字符串)读入字符列表,并存储它们在字符串中出现的时间。因此,它将生成一个介于(a-Z)之间的列表,并根据字符出现的次数对其排序。有没有一种不使用LINQ的方法可以做到这一点


谢谢:)

您可以使用哈希表来完成此操作

Hashtable listofChars = new Hashtable();

for () { // your loop for the chars in the file
        Char c ; // your char
        if (!listofChars.ContainsKey(c))
        {
            listofChars[c] = 1;
        }
        else {
            listofChars[c] = ((int)listofChars["c"]) + 1;
        } 
}
--编辑--

var listofChars = new SortedDictionary<char, int>();
foreach(char c in File.ReadAllText(fileName))
{
    if (!listofChars.ContainsKey(c))
    {
        listofChars[c] = 1;
    }
    else
    {
        listofChars[c] += 1;
    } 
}
var listofChars=new SortedDictionary();
foreach(文件中的字符c.ReadAllText(文件名))
{
如果(!listofChars.ContainsKey(c))
{
listofChars[c]=1;
}
其他的
{
listofChars[c]+=1;
} 
}

一种高效而简单的方法是创建一个以字符为键,以数字为值的字符串。它有nice(upsert)方法:

结果:

Console.Write(string.Join(Environment.NewLine, charList.Select(kv => string.Format("Char={0} Num={1}", kv.Key, kv.Value))));

Char=  Num=90
Char=e Num=59
Char=t Num=43
Char=s Num=39
Char=n Num=38
Char=i Num=32
Char=a Num=28
Char=o Num=25
Char=r Num=24
Char=p Num=18
Char=m Num=18
Char=l Num=17
Char=u Num=17
Char=d Num=16
Char=h Num=14
Char=y Num=13
Char=g Num=11
Char=c Num=10
Char=k Num=7
Char=w Num=6
Char=f Num=6
Char=I Num=6
Char=v Num=5
Char=b Num=5
Char=L Num=5
Char=, Num=4
Char=. Num=4
Char=0 Num=3
Char=x Num=2
Char=1 Num=2
Char=' Num=1
Char=5 Num=1
Char=M Num=1
Char=A Num=1
Char=P Num=1
Char=6 Num=1
Char=9 Num=1

你试过什么?您需要发布一个您需要帮助的实际问题,而不是其他人为您完成的一般任务。对不起,我只能在LINQ中执行此操作,我需要另一种方法来执行此操作。@Qnan:因为这可能是家庭作业或面试问题。@SteveGuidi yep,总有人愿意做别人的家庭作业:)你为什么要教别人一些你不知道的东西?更好的问题:为什么有人愿意从不懂的人那里学东西?字典不是更好吗?是的,它更好。我已经写了我脑海中出现的第一个解决方案。我编辑了你的答案,如果你不喜欢,请随意删除。你好,谢谢你的回答。我用了你的@L.B-我还能排序吗?Sort(委托(KeyValuePair x,KeyValuePair y){return x.Value.CompareTo(y.Value);})@您可以使用
SortedDictionary
而不是
Dictionary
,但是您不能将“chars”转换为list,而只能转换为string?对不起,我不太懂。你测试过代码了吗?我在monodevelop上。。是我得到的“Type”Systems.Collections.ConcurrentDictionary“不包含“ToList”的定义的代码(在main中)@Phorce:对不起,您需要使用System.Linq为
ToList
添加
。如果要避免这种情况,需要使用循环手动创建列表。请注意,我刚刚编辑了我的amswer,以展示如何对列表进行降序排序。嘿,非常感谢您的回复。。添加或更新时是否可以使用.Where语句?例如chars.AddOrUpdate(c,1,(chr,count)=>count+1);
List<KeyValuePair<char, int>> charList = chars.ToList();
charList.Sort((firstPair, nextPair) =>
{
    return firstPair.Value.CompareTo(nextPair.Value);
});
charList.Sort((firstPair, nextPair) =>
{
    return -(firstPair.Value.CompareTo(nextPair.Value));
});
Console.Write(string.Join(Environment.NewLine, charList.Select(kv => string.Format("Char={0} Num={1}", kv.Key, kv.Value))));

Char=  Num=90
Char=e Num=59
Char=t Num=43
Char=s Num=39
Char=n Num=38
Char=i Num=32
Char=a Num=28
Char=o Num=25
Char=r Num=24
Char=p Num=18
Char=m Num=18
Char=l Num=17
Char=u Num=17
Char=d Num=16
Char=h Num=14
Char=y Num=13
Char=g Num=11
Char=c Num=10
Char=k Num=7
Char=w Num=6
Char=f Num=6
Char=I Num=6
Char=v Num=5
Char=b Num=5
Char=L Num=5
Char=, Num=4
Char=. Num=4
Char=0 Num=3
Char=x Num=2
Char=1 Num=2
Char=' Num=1
Char=5 Num=1
Char=M Num=1
Char=A Num=1
Char=P Num=1
Char=6 Num=1
Char=9 Num=1