Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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
Powershell,某种内置的集合交叉点?_Powershell_Set_Intersection - Fatal编程技术网

Powershell,某种内置的集合交叉点?

Powershell,某种内置的集合交叉点?,powershell,set,intersection,Powershell,Set,Intersection,对于一些需要从一堆松散的字母中查找字谜的游戏,我最终实现了一种排列算法,以查找所有可能的字谜,并根据已知字母位置过滤这些字谜(顺便说一句,匹配很好)。但对于较长的单词来说,这是非常容易出错的,因为浏览大量的胡言乱语列表并不能真正揭示隐藏在其中的正确单词 所以我想,如果我有一个很大的英语单词列表(应该可以在某处找到),我可以将我的排列列表与适当的单词列表相交,然后(希望)从排列列表中获得所有真实的单词 由于PS中的许多操作符对集合的处理方式不同,我想我可以这样做 $wordlist -contai

对于一些需要从一堆松散的字母中查找字谜的游戏,我最终实现了一种排列算法,以查找所有可能的字谜,并根据已知字母位置过滤这些字谜(顺便说一句,匹配很好)。但对于较长的单词来说,这是非常容易出错的,因为浏览大量的胡言乱语列表并不能真正揭示隐藏在其中的正确单词

所以我想,如果我有一个很大的英语单词列表(应该可以在某处找到),我可以将我的排列列表与适当的单词列表相交,然后(希望)从排列列表中获得所有真实的单词

由于PS中的许多操作符对集合的处理方式不同,我想我可以这样做

$wordlist -contains $permlist
然后回到十字路口。不幸的是,这并不容易。我想到的其他选项是迭代一个列表,并对每个项目执行
-contains

$permlist | ? { $wordlist -contains $_ }
这可能会起作用,但我认为也很慢(特别是当
$wordlist
gc wordlist.txt
的结果时)。或者我可以构建一个巨大的正则表达式:

$wordlist -matches (($permlist | %{ "^$_`$" }) -join "|")
但这也可能不是很快。我也可以将
findstr
与上述巨大的正则表达式一起使用,但这感觉是错误的


是否有任何内置的解决方案可以使用,并且比我目前的尝试更好?否则,我可能会将单词列表放入哈希表,并使用迭代的
-contains
方法,该方法应该足够快。

您可以根据标准词典检查单词列表并消除所有拼写错误

安装了软件包后

 cat text.txt | aspell list
将为您提供所有未拼写单词的列表。
您可以使用
aspell
使用其他词典


或者只是接个电话

Revolution Word Finder有两个选项;一个拼字游戏查找器和一个拼字游戏解决器。Anagram Finder获取字母列表,并返回相对于固定单词列表可以使用它们创建的所有有效的Anagram。每一个字谜都要对照当前国际拼字比赛中使用的单词表进行有效性检查

(从中借用新哈希集)

警告:HashSet上的那些方法是修改原始集合的现有算法。如果要在不可变对象上进行功能样式转换,则需要将LINQ带到团队中:

add-type system.core

$asqueryable = [system.linq.queryable].getmethods() | ? { $_.name -eq "AsQueryable" } | select -first 1
$asqueryable = $asqueryable.MakeGenericMethod([string])
$leftAsQueryable = $asqueryable.Invoke($null, (,$left))

$intersect = [system.linq.queryable].getmethods() | ? { $_.name -eq "Intersect" } | select -first 1
$intersect = $intersect.MakeGenericMethod([string])
$result = $intersect.Invoke($null, ($leftAsQueryable, $right))

显然,需要有人将这种静态通用反射垃圾打包到一个友好的cmdlet中!别担心,我正在努力……

“你可以检查你的单词列表,并根据标准词典消除所有拼写错误。”嗯,这正是我所尝试的。然而,这并没有告诉我如何做到这一点,至少部分地回避了我的问题。对不起,我并不是有意回避你的拼写检查点,我已经添加了一个关于我意思的参考。我是说你有标准的工具来计算匹配列表。嗯,没错,虽然这不是一个“Powershell内置”解决方案。我可能还可以强迫办公室的拼写检查器工作,但这可能超出了我愿意为此做的。另外,给我一个拼写错误的单词列表对我也没有帮助,因为我更需要一个拼写正确的单词列表:)(在某些层面上,我甚至很难找到我需要构建的单词,这就是为什么我决定使用暴力强制每个排列,并在结果列表中查找单词。您的要求非常接近拼字的需要。而且,一旦您得到拼写错误的单词,从数据集中反转结果就不应该是错误的。)很难——你的关键区别已经完成。同时,我还没有检查
aspell
是否能给你拼写正确的单词列表——这不太可能。关于内置需求。当你打包解决方案时,为什么要在shell中尝试复杂的算法……好吧,这与我的方法有关。绝对不漂亮。(而且绝对不适合从cmdline本身展开使用)。
add-type system.core

$asqueryable = [system.linq.queryable].getmethods() | ? { $_.name -eq "AsQueryable" } | select -first 1
$asqueryable = $asqueryable.MakeGenericMethod([string])
$leftAsQueryable = $asqueryable.Invoke($null, (,$left))

$intersect = [system.linq.queryable].getmethods() | ? { $_.name -eq "Intersect" } | select -first 1
$intersect = $intersect.MakeGenericMethod([string])
$result = $intersect.Invoke($null, ($leftAsQueryable, $right))