2009-10-22 144 views
2

我在哪裏可以找到C#等價的Python maketrans代碼和翻譯? 謝謝!C#等價的python maketrans和翻譯

+0

@paparipote:任何評論我們提供的解決方案? – hughdbrown 2009-10-23 12:27:49

+0

@paparipote:嗯。當我評論時,StackOverflow沒有記錄您的任何回覆。 – hughdbrown 2009-10-23 12:30:00

回答

2

這應該帶你大部分的方式出現:

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-y方式完成的。這有點不明顯,所以註釋掉的代碼被提供並且執行相同的操作。

這裏是它的外觀在Python(example lifted from here):

>>> 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!!!