所以我试图通过拼字游戏来尝试工作,我试图使用带有int hashset列表的字典。我根据它们的值(key = int = score)将字母分组,如下所示。
HashSet<char> pointsONEList = new HashSet<char>(new char[] { 'e', 'a', 'i', 'o', 'n', 'r', 't', 'l', 's', 'u' });
HashSet<char> pointsTwoList = new HashSet<char>(new char[] { 'd', 'g' });
HashSet<char> pointsThreeList = new HashSet<char>(new char[] { 'b', 'c', 'm', 'p' });
HashSet<char> pointsFourList = new HashSet<char>(new char[] { 'f', 'h', 'v', 'w', 'y' });
HashSet<char> pointsFiveList = new HashSet<char>(new char[] { 'k' });
HashSet<char> pointsEightList = new HashSet<char>(new char[] { 'j', 'x' });
HashSet<char> pointsTenList = new HashSet<char>(new char[] { 'q', 'z' });
Dictionary<int, HashSet<char>> letterPoints = new Dictionary<int, HashSet<char>>();
letterPoints.Add(1, pointsONEList);
letterPoints.Add(2, pointsTwoList);
letterPoints.Add(3, pointsThreeList);
letterPoints.Add(4, pointsFourList);
letterPoints.Add(5, pointsFiveList);
letterPoints.Add(8, pointsEightList);
letterPoints.Add(10, pointsTenList);
接下来,我需要找到一种方法来拆分单词,找到单词中的每个字符,在列表中找到它,然后使用给定的单词及其所有数字的总和添加到另一个字典中。
这是我到目前为止所拥有的
int N = int.Parse(Console.ReadLine());
for (int i = 0; i < N; i++)
{
string W = Console.ReadLine();
int wordValue=0;
char[] splitWord = W.ToCharArray();
for (int j = 0; j < splitWord.Length; j++)
{
for (int h = 0; h < letterPoints.Count; h++)
{
}
}
}
我无法搜索整个字典
答案 0 :(得分:2)
使用LINQ
,您可以在一行中执行此操作:
var points = splitWord.Sum(c => letterPoints.First(kvp => kvp.Value.Contains(c)).Key)
此代码的作用是:splitWord
中的每个字符都从包含该字符的letterPoints中找到HashSet
,获取相应的密钥,并将所有密钥相加并得到总点数