【问题标题】:Character Shuffling and Re-Arranging in c# [closed]c#中的字符改组和重新排列[关闭]
【发布时间】:2023-03-14 00:13:01
【问题描述】:

在我的一个应用程序中,我想打乱字符串内容,而在另一个应用程序中,如果我将此打乱的字符串作为输入传递,那么该应用程序必须返回原始字符串值。在 dotnet 平台中是否有任何方法可以做到这一点?

【问题讨论】:

  • 你该怎么做一些像 Fisher-Yates shuffle 这样的事情?
  • 你已经完成的代码在哪里?
  • “应用程序”是指“宁静的服务”吗?
  • 为什么要重新发明轮子?使用加密/解密方法。
  • Shuffle 是错误的术语。根据定义,它的意思是“随机改变顺序”,所以它不是可逆的。

标签: c# .net c#-4.0 c#-3.0


【解决方案1】:

你可以使用Fisher–Yates shuffle算法。

它是一种生成有限随机排列的算法 set——简单来说,就是随机打乱集合。

生成数字 1-N 的随机排列的基本方法如下:

  1. 写下从 1 到 N 的数字。
  2. 在 1 和未击中的数之间选择一个随机数 k 剩余数量(含)。
  3. 从低端开始,剔除第k个尚未击中的数字 出来,写在别处。
  4. 从第 2 步开始重复,直到所有数字都被删除。
  5. 步骤 3 中写下的数字序列现在是随机的 原始数字的排列。

有一个例子:shuffle algorithm

还有一个好here

【讨论】:

  • 好的...工作正常..
  • @Praveen Kumar:如果有帮助,请接受作为答案:D
【解决方案2】:

绝对不是开箱即用,而是为自己创建一个struct

struct ShuffleChar{
    char c;
    int index;
}

当你洗牌时,给每个字母分配一个index,这样你就可以把它们重新组合在一起。请记住,string 仅在字母顺序正确的情况下才有意义,更改该顺序会破坏该信息,并且很可能无法恢复它...

【讨论】:

  • ok..那么如何重新排列呢?
  • 就像我在回答中告诉你的那样,尝试以某种方式保存信息。洗牌后,您将无法重新创建原始字符串,而不会保留有关其来源的任何信息
猜你喜欢
  • 2021-03-17
  • 2012-09-03
  • 1970-01-01
  • 2020-10-30
  • 2013-07-31
  • 2019-07-08
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多