В некоторых играх, где нужно было бы находить анаграммы из набора свободных букв, я в итоге реализовал алгоритм перестановки, чтобы найти все возможные анаграммы и отфильтровать их при необходимости для известных положений букв (кстати, -match
отлично ). Но для более длинных слов это оказалось очень подверженным ошибкам, так как просмотр большого списка тарабарщин на самом деле не показывает правильные слова, которые были скрыты внутри.
Так что я подумал, что если у меня будет большой список английских слов (должен быть где-то доступен), я мог бы просто пересечь мой список перестановок со списком правильных слов и получить (надеюсь) все реальные слова из списка перестановок.
Так как многие операторы в PS работают с коллекциями по-разному, я подумал, что могу просто сделать что-то вроде
$wordlist -contains $permlist
и верни пересечение. К сожалению, это не так просто. Другие варианты, о которых я подумал, - перебирать один список и делать -contains
для каждого элемента:
$permlist | ? { $wordlist -contains $_ }
Это, вероятно, сработало бы, но я думаю, что оно также очень медленное (особенно, когда $wordlist
является результатом gc wordlist.txt
). Или я мог бы построить гигантское регулярное выражение:
$wordlist -matches (($permlist | %{ "^$_`$" }) -join "|")
Но это, вероятно, тоже было бы не очень быстро. Возможно, я мог бы также использовать findstr
с приведенным выше гигантским регулярным выражением, но это просто неправильно.
Есть ли какие-нибудь встроенные решения, которые я мог бы использовать, и которые лучше моих попыток? В противном случае я, вероятно, поместил бы список слов в хеш-таблицу и использовал бы итерационный подход -contains
, который должен быть достаточно быстрым.