我有一个这样的字符串:
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()中的默认返回值,这样它只需在符号出现时返回#符号在我的输入字符串中?
答案 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 += "#";
}