我在想是否有一种方法(使用ASP.NET C#)可以“洗牌”字符串的内容,但仍然能够单击另一个按钮并将其“解除洗牌”回到原始内容,而不保存原始内容?
谢谢 :)
示例:
"This is not shuffled."
"isuo .tffsnl iTh shed"
...And then I click the "UNShuffle" button and it becomes normal again:
"This is not shuffled."
var rnd = new Random();
string unsuffled = "This is not shuffled.";
string shuffled = new string(unsuffled.OrderBy(r => rnd.Next()).ToArray());
好的,您需要保存一些东西。一个简单的想法:
Random
实例来使用该种子进行洗牌然后这个洗牌是可逆的——尽管需要付出一点努力。(我可能会用相同的方式对数字0...(n-1)进行洗牌,然后反向映射字符。)
棘手的部分是,您确实需要种子——这有点像存储密码哈希值的盐。您必须有一些额外的信息来说明它是如何被洗牌的,否则您将不知道“abc”是来自“bac”还是“cab”,例如。
public int Random() { return 4; }
,不,您不能随机洗牌并在不保存任何元数据的情况下将其返回到原始状态。但是,如果您确切地知道字符是如何移动的,那么您可以将它们移回去。 - Filip Ekberg