使用C#将“#BAL#”转换为“#225#”

时间:2013-03-07 05:02:20

标签: c# linq

我有一个这样的字符串:

string ussdCommand = "#BAL#";

我想将其转换为“#225#”。目前,我有一个如下定义的字典:

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("ABC", 2);
dictionary.Add("DEF", 3);
dictionary.Add("GHI", 4);
dictionary.Add("JKL", 5);
dictionary.Add("MNO", 6);
dictionary.Add("PQRS", 7);
dictionary.Add("TUV", 8);
dictionary.Add("WXYZ", 9);

然后我有一个函数接受我的原始字符串(“#BAL#”)并将其转换为:

private static string ConvertLettersToPhoneNumbers(string letters)
{
    string numbers = string.Empty;
    foreach (char c in letters)
    {
        numbers += dictionary.FirstOrDefault(d => d.Key.Contains(c)).Value.ToString();
    }
    return numbers;
}

正如您将立即注意到的,问题是我的字典中没有包含“#”条目所以.FirstOrDefault()返回默认值,我得到的是“02250”而不是“#225” #”。我没有#符号的字典条目,因为它与数字不对应,但有一种方法可以修改或覆盖.FirstOrDefault()中的默认返回值,这样它只需在符号出现时返回#符号在我的输入字符串中?

2 个答案:

答案 0 :(得分:2)

我将其更改为使用Dictionary<char, char>,并使用TryGetValue轻松找出是否存在映射:

private static readonly Dictionary<char, char> PhoneMapping =
    new Dictionary<char, char>
{
    { 'A', '2' }, { 'B', '2' }, { 'C', '2' },
    { 'D', '3' }, { 'E', '3' }, { 'F', '3' },
    { 'G', '4' }, { 'H', '4' }, { 'I', '4' },
    { 'J', '5' }, { 'K', '5' }, { 'L', '5' }, 
    { 'M', '6' }, { 'N', '6' }, { 'O', '6' },
    { 'P', '7' }, { 'Q', '7' }, { 'R', '7' }, { 'S', '7' },
    { 'T', '8' }, { 'U', '8' }, { 'V', '8' },
    { 'W', '9' }, { 'X', '9' }, { 'Y', '9' }, { 'Z', '9' }
};

private static string ConvertLettersToPhoneNumbers(string letters)
{
    char[] replaced = new char[letters.Length];
    for (int i = 0; i < replaced.Length; i++)
    {
        char replacement;
        replaced[i] = PhoneMapping.TryGetValue(letters[i], out replacement)
            ? replacement : letters[i];
    }
    return new string(replaced);
}

请注意,对于其他情况,您希望使用“first,but with default”,您可以使用:

var foo = sequence.DefaultIfEmpty(someDefaultValue).First();

答案 1 :(得分:0)

它的工作

protected void Page_Load(object sender, EventArgs e)
    {
        Dictionary<string, int> dictionary = new Dictionary<string, int>();
        dictionary.Add("ABC", 2);
        dictionary.Add("DEF", 3);
        dictionary.Add("GHI", 4);
        dictionary.Add("JKL", 5);
        dictionary.Add("MNO", 6);
        dictionary.Add("PQRS", 7);
        dictionary.Add("TUV", 8);
        dictionary.Add("WXYZ", 9);


        string value = "BAL";
        string nummber = "#";
        foreach (char c in value)
        {

            nummber += dictionary.FirstOrDefault(d => d.Key.Contains(c)).Value.ToString();
        }
        nummber += "#";

    }