对于某些需要从一堆松散的字母中找出变位词的游戏,我最终实现了一个排列算法来查找所有可能的变位词,并在必要时过滤已知的字母位置(顺便说一下,-match非常好用)。但对于较长的单词,这种方法很容易出错,因为浏览大量的无意义列表并不能揭示其中隐藏的正确单词。
所以我想,如果我有一个大型的英语单词列表(应该可以在某个地方获得),我只需将我的排列列表与正确单词列表相交,就可以从排列列表中获取(希望)所有真正的单词。
由于PS中的许多运算符与集合的工作方式不同,我认为我可以做一些类似于以下的操作:
所以我想,如果我有一个大型的英语单词列表(应该可以在某个地方获得),我只需将我的排列列表与正确单词列表相交,就可以从排列列表中获取(希望)所有真正的单词。
由于PS中的许多运算符与集合的工作方式不同,我认为我可以做一些类似于以下的操作:
$wordlist -contains $permlist
并获取交集。不幸的是,这并不容易。我想到的其他选项是遍历一个列表,并对每个项目执行 -contains
:
$permlist | ? { $wordlist -contains $_ }
我认为这种方法可能会生效,但速度非常慢(特别是当$wordlist
是gc wordlist.txt
的结果时)。或者我可以构建一个巨大的正则表达式:
$wordlist -matches (($permlist | %{ "^$_`$" }) -join "|")
但这种方法也可能不太快。我可以尝试使用上述巨大的正则表达式和findstr
,但感觉不太对。
有没有内置的解决方案比我目前的尝试更好?否则,我可能会将单词列表放入哈希表中,并使用迭代的-contains
方法,这样应该足够快。
$left = [System.Collections.Generic.HashSet[string]]::new()
实例化。所以现在可能 HashSets 不再是一个可行的解决方案,或者至少我无法让它工作。 - Blaisem