Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何导入字典文本文件并检查单词匹配?_C#_Arrays_Dictionary - Fatal编程技术网

C# 如何导入字典文本文件并检查单词匹配?

C# 如何导入字典文本文件并检查单词匹配?,c#,arrays,dictionary,C#,Arrays,Dictionary,我生成一个500个字符的随机字符串,并希望检查单词 bliduuwfhbgphwhsyzjnlfyizbjfeeepsbpgplpbhaegyepqcjhhotovnzdtlracxrwggbcmjiglasjvmscvxwazmutqiwppzcjhijjbguxfnduuphhsoffaqwtmhmensqmyicnciaoczumjzyaaowbtwjqlpxuuqknxqvmnueknqcbvkkmildyvosczlbnlgumohosemnfkmndtiubfkminlriytmbt

我生成一个500个字符的随机字符串,并希望检查单词

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"]);