C# 如何导入字典文本文件并检查单词匹配?
我生成一个500个字符的随机字符串,并希望检查单词C# 如何导入字典文本文件并检查单词匹配?,c#,arrays,dictionary,C#,Arrays,Dictionary,我生成一个500个字符的随机字符串,并希望检查单词 bliduuwfhbgphwhsyzjnlfyizbjfeeepsbpgplpbhaegyepqcjhhotovnzdtlracxrwggbcmjiglasjvmscvxwazmutqiwppzcjhijjbguxfnduuphhsoffaqwtmhmensqmyicnciaoczumjzyaaowbtwjqlpxuuqknxqvmnueknqcbvkkmildyvosczlbnlgumohosemnfkmndtiubfkminlriytmbt
bliduuwfhbgphwhsyzjnlfyizbjfeeepsbpgplpbhaegyepqcjhhotovnzdtlracxrwggbcmjiglasjvmscvxwazmutqiwppzcjhijjbguxfnduuphhsoffaqwtmhmensqmyicnciaoczumjzyaaowbtwjqlpxuuqknxqvmnueknqcbvkkmildyvosczlbnlgumohosemnfkmndtiubfkminlriytmbtrzhwqmovrivxxojbpirqahatmydqgulammsnfgcvgfncqkpxhgikulsjynjrjypxwvlkvwvigvjvuydbjfizmbfbtjprxkmiqpfuyebllzezbxozkiidpplvqkqlgdlvjbfeticedwomxgawuphocisaejeonqehoipzsjgbfdatbzykkurrwwtajeajeornrhyoqadljfjyizzfluetynlrpoqojxxqmmbuaktjqghqmusjfvxkkyoewgyckpbmismwyfebaucsfueuwgio
我导入一个字符串并检查字符串
,查看它是否包含每个单词。如果找到匹配项,则会将其添加到列表中
我使用
字典
阅读单词列表要比数组
快
当我使用该方法时,我可以看到cpu在调试器中运行foreach循环,我的循环计数器上升,在10秒内上升了10000多次,但循环一直持续,不会返回任何结果
当我使用Array
作为Dictionary时,程序可以工作,但速度较慢,大约在10秒内慢500倍
不工作 使用
字典
你误用了字典, 您基本上将字典用作列表,因此它只会给程序增加一些开销。没有任何帮助 如果您想查询字典中的某些内容,而不是反过来查询,那么它会很有用 另外,在任何情况下,您需要的是哈希集,而不是字典,因为字典中的键不是您要查询的单词,而是一个不相关的int 您可以在此处阅读有关dictionary和HashSet的更多信息: 字典:
hashset:我怀疑你是否想把
字典作为字典;)<代码>哈希集
就足够了:
using System.Linq;
...
string source = "bliduuwfhbgphwhsyzjnlfyizbj";
HashSet<string> allWords = new HashSet<string>(File
.ReadLines(@"C:\dictionary.txt")
.Select(line => line.Trim())
.Where(line => !string.IsNullOrEmpty(line)), StringComparer.OrdinalIgnoreCase);
int shortestWord = allWords.Min(word => word.Length);
int longestWord = allWords.Max(word => word.Length);
// If you want duplicates, change HashSet<string> to List<string>
HashSet<string> wordsFound = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
for (int length = shortestWord; length <= longestWord; ++length) {
for (int position = 0; position <= source.Length - length; ++position) {
string extract = source.Substring(position, length);
if (allWords.Contains(extract))
wordsFound.Add(extract);
}
}
我们有产量
id, li, lid
在这种情况下使用字典没有多大意义。字典本质上是存储变量名和变量值的变量列表 我可以有以下几点:
int age = 21;
int money = 21343;
int distance = 10;
int year = 2017;
Dictionary<string, int> numbers = new Dictionary<string, int>()
{
{ "age", 21 },
{ "money", 21343},
{ "distance", 10 },
{ "year", 2017 }
};
并使用以下方法将其转换为字典:
int age = 21;
int money = 21343;
int distance = 10;
int year = 2017;
Dictionary<string, int> numbers = new Dictionary<string, int>()
{
{ "age", 21 },
{ "money", 21343},
{ "distance", 10 },
{ "year", 2017 }
};
这只是一个简单的例子,说明了字典的力量——它们能做的还有很多,它们能让你的生活更轻松。然而,在这种情况下,他们不会做你期望他们做的事情。我建议只使用数组或列表。即将尝试此操作,已准备好代码,但我发现单词中不存在“words”的错误。Min和words.Max.@Matt McManis:请确保您已使用System.Linq添加了
因为Min
和Max
是使用System.Linq的扩展方法;有,但什么是“文字”,它应该是所有的文字吗?它说找不到。@Matt McManis:很抱歉输入错误,它应该是allWords
,在这两种情况下,我得到的值不能为空。
如果(allWords.Contains(extract))
打开。如果找不到单词,是否应该进行某种空检查?为什么会出现空错误?
Dictionary<string, int> numbers = new Dictionary<string, int>()
{
{ "age", 21 },
{ "money", 21343},
{ "distance", 10 },
{ "year", 2017 }
};
Console.Log(numbers["age"]);