在C#中掩盖5个字母的单词中的3个随机字母的最佳方法是什么? 例如,如果输入字符串为“ 12345”,那么我需要将其转换为以下输出之一。 “ 12 ***”或“ 1 * 3 **”或“ 1 4 *”或“ * 23 ”或“ * 2 * 4 *”或“ * 2 ** 5”或“ ** 34 *”或“ ** 3 * 5”或“ *** 45”
谢谢!
答案 0 :(得分:2)
虽然我喜欢Mehrdad的方法,但那里似乎存在缺陷。由于订购后选择了索引,因此似乎总是具有相同的结果。受到同样的启发,你可以做下面的事情
Random rnd = new Random();
var inputString = "ABCDE";
var resultBuilder = new StringBuilder();
var randomIndices = Enumerable.Range(0,inputString.Length)
.OrderBy(x=>rnd.Next())
.Take(2)
.ToList();
for(int i=0;i<inputString.Length;i++)
{
resultBuilder.Append(randomIndices.Contains(i) ? '*':inputString[i]);
}
var result = resultBuilder.ToString();
在不同的通话中输出样本
**C*E
A*C**
**CD*
答案 1 :(得分:0)
您可以使用随机排序,例如前3个,然后可以将*
分配给随机选择的Ids
:
Random rnd = new Random();
var s = "12345";
var result = s.ToArray();
var randomIds= Enumerable.Range(0, s.Length).OrderBy(x => rnd.Next()).Take(3);
foreach (var id in randomIds)
{
result[id] = '*';
}
var stringResult = String.Join("", result);
一个输出:
"***45"