C # эквивалентность Python Макетранс и перевод - PullRequest
2 голосов
/ 23 октября 2009

Где я могу найти код C # эквивалентности Python maketrans и перевести? Спасибо!

1 Ответ

2 голосов
/ 23 октября 2009

Это займет у вас большую часть пути:

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 ( пример взят здесь ):

>>> 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!!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...