Рассмотрим этот подход:
using System;
using System.Linq;
using System.Collections.Generic;
namespace Whatever
{
class Program
{
static void Main(string[] args)
{
var vowels = new Dictionary<string, int>(5, StringComparer.OrdinalIgnoreCase) { { "a", 1 }, { "e", 5 }, { "i", 9 }, { "o", 15 }, { "u", 21 } };
Console.WriteLine("Write something : ");
var input = Console.ReadLine();
var sum = input.Select((value, index) => new { value, index })
.Sum(x =>
{
vowels.TryGetValue(x.value.ToString(), out var multiplier);
return (x.index + 1) * multiplier;
});
Console.ReadLine();
}
}
}
Select
проецирует исходную строку как анонимный тип с char
и включенным в него индексом.
Sum
проверяет, является ли строка гласной, и, если это так, умножает позицию (index + 1
) на позицию в алфавите (с vowels
).
vowels
не учитывает регистр, поэтому «A» и «a» обрабатываются одинаково.
Если компилятор жалуется на out var
, тогда используйте:
int multiplier = 0;
vowels.TryGetValue(x.value.ToString(), out multiplier);
return (x.index + 1) * multiplier;
вместо.