C# 中等同于 Python 的 maketrans 和 translate
我在哪里可以找到C#中类似于Python的maketrans和translate的代码?谢谢!
1 个回答
3
这段代码应该能帮你解决大部分问题:
public class MakeTrans
{
private readonly Dictionary<char, char> d;
public MakeTrans(string intab, string outab)
{
d = Enumerable.Range(0, intab.Length).ToDictionary(i => intab[i], i => outab[i]);
//d = new Dictionary<char, char>();
//for (int i = 0; i < intab.Length; i++)
// d[intab[i]] = outab[i];
}
public string Translate(string src)
{
System.Text.StringBuilder sb = new StringBuilder(src.Length);
foreach (char src_c in src)
sb.Append(d.ContainsKey(src_c) ? d[src_c] : src_c);
return sb.ToString();
}
}
你需要确保 intab 和 outtab 的长度是一样的。你可以添加一些功能,比如去掉某些字母等等。
字典的构建方式很酷,使用了 LINQ,这种写法可能不太容易理解,所以这里提供了注释掉的代码,它实现了同样的功能。
下面是 Python 的写法(这个例子来自这里):
>>> from string import maketrans # Required to call maketrans function.
>>>
>>> intab = "aeiou"
>>> outtab = "12345"
>>> trantab = maketrans(intab, outtab)
>>>
>>> str = "this is string example....wow!!!";
>>> print str.translate(trantab);
th3s 3s str3ng 2x1mpl2....w4w!!!
这里是 C# 的测试代码:
static void Main(string[] args)
{
MakeTrans.MakeTrans mt = new MakeTrans.MakeTrans("aeiou", "12345");
Console.WriteLine("{0}", mt.Translate("this is string example....wow!!!"));
}
这是输出结果:
th3s 3s str3ng 2x1mpl2....w4w!!!