Fisher-Yates在单个字符串上改组而不是使用等长排列?现在我正在开发一套文字游戏作为自学的一种方式(并重新创建一些我最喜欢的文字游戏!)在“实际上”学习编程的朋友的帮助下,我们在课堂上实现了一个很好的Arrange方法。它正在寻找3个以上字母的所有排列,并将它们与我包含的字符串列表进行比较,该列表基本上包含拼字游戏锦标赛单词列表。这是背景,这是我当前的问题:我现在拥有所有排列并将它们与现有单词进行比较,并创建一个新列表,其中包含给定字符串组合中的所有可能单词。但是,当我将这个字符串提供给用户时,我需要对其进行置乱。我发现了Fisher-Yates随机播放的一些C#实现,但我没有成功让它们接受单个字符串(编辑:使用char[]数组解决的Fisher-Yates问题)。然后我有了一个hackidea-为什么不使用相同长度的排列but!=原话。不幸的是,每当我的条件语句向后返回单词时。最终用户并不难理解:)这是我的乱序代码://permWords是一个DictionaryStringstrScrambled="";foreach(列出permWords.Values中的listWords){foreach(listWords中的字符串单词){if(word.Length==strWord.Length&&word!=strWord){strScrambled=word;}}}我试过strScrambled=word+1假设第一个排列不是strScrambled=word+1原始单词是倒过来的。但是,我不认为它在这种情况下真的“有效”;特别是考虑到它仍然返回相同的后备词。我得到了一个关于如何使用char数组修复Fisher-Yates的非常有用的答案,但我仍然对如何像我发布的那样最好地使用感兴趣,只是想找到一种方法来确保答案不仅仅是拼写单词。我对这种方法很感兴趣,因为置换列表已经存在;我想让它成为我的解决方案。我认为您已经有了一个进行改组的方法:voidFisherYatesShuffle(char[]elements){intN=elements.Count;for(inti=0;i您需要做的就是将字符串转换为CharArray,然后将结果转换回字符串:stringshuffle(stringinput){vararr=input.ToCharArray();FisherYatesShuffle(arr);returnnewString(arr);}看看这是否适合你...stringstr="hello";//随机数序列Randomnum=newRandom();stringrand=str;while(rand==str)rand=newstring(str.OrderBy(s=>(num.Next())).ToArray());如果要保证打乱后的值不完全相反,可以把while条件改成。..等长编排?全部内容分享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注---while(rand==str||rand==str.Reverse())本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,转载请注明出处: