gpt4 book ai didi

c# - 在单词列表中查找 "hook words"的有效方法?

转载 作者:行者123 更新时间:2023-11-30 15:04:15 24 4
gpt4 key购买 nike

钩词是可以在开头或结尾加一个字母组成新词的词。

我有一个相当大的单词列表(大约 170k),我想随机选择 5 个钩词。问题是我使用的方法非常慢。见下文:

Random rnd = new Random();
var hookBases = (from aw in allWords //allWords is a List<string>
from aw2 in allWords
where aw2.Contains(aw)
&& aw2.Length == aw.Length + 1
&& aw[0] == 'c'
select aw).OrderBy(t => rnd.Next()).Take(5);

当我尝试从 hookBase 访问任何内容时,它会旋转几分钟,然后我放弃并杀死它。

任何人都可以看到我尝试执行此操作的任何明显错误吗?有什么更有效的建议吗?

最佳答案

首先,allWords 应该是 HashSet<string> , 不是 List<string> , 用于高效查找。

完成后,迭代哈希集,并检查删除第一个或最后一个字母是否会产生一个新的有效单词。那是你的钩词。

HashSet<string> result = new HashSet<string>();
foreach (string word in allWords) {
string candidate = word.Substring(0, word.Length - 1);
if (allWords.Contains(candidate)) { result.Add(candidate); }
candidate = word.Substring(1, word.Length - 1);
if (allWords.Contains(candidate)) { result.Add(candidate); }
}

如果您想使用 LINQ 执行此操作:

List<string> hookWords = allWords
.Select(word => word.Substring(0, word.Length - 1))
.Concat(allWords.Select(word => word.Substring(1, word.Length - 1)))
.Distinct()
.Where(candidate => allWords.Contains(candidate))
.ToList();

在线查看它:ideone

关于c# - 在单词列表中查找 "hook words"的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10528766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com