gpt4 book ai didi

c# - 搜索字符串数组中包含的字典键

转载 作者:太空狗 更新时间:2023-10-29 23:12:42 26 4
gpt4 key购买 nike

我有一个字符串列表,其中每个项目都是描述技能的自由文本,所以看起来有点像这样:

List<string> list = new List<string> {"very good right now", "pretty good",
"convinced me that is good", "pretty medium", "just medium" .....}

我想保留这些免费文本的用户评分。所以现在,我使用条件:

foreach (var item in list)
{
if (item.Contains("good"))
{
score += 2.5;
Console.WriteLine("good skill, score+= 2.5, is now {0}", score);
}
else if (item.Contains(low"))
{
score += 1.0;
Console.WriteLine("low skill, score+= 1.0, is now {0}", score);
}

}

假设将来我想使用字典来进行分数映射,例如:

Dictionary<string, double> dic = new Dictionary<string, double>
{ { "good", 2.5 }, { "low", 1.0 }};

在字典值和字符串列表之间交叉的好方法是什么?我现在看到的方式是做一个嵌套循环:

foreach (var item in list)
{
foreach (var key in dic.Keys)
if (item.Contains(key))
score += dic[key];
}

但我确信有更好的方法。至少速度更快或更赏心悦目 (LINQ) 更好。

谢谢。

最佳答案

var scores = from item in list
from word in item.Split()
join kvp in dic on word equals kvp.Key
select kvp.Value;

var totalScore = scores.Sum();

注意:您当前的解决方案检查列表中的项目是否包含字典中的键。但即使字典中的键是项目中某个单词的一部分,它也会返回 true。例如。 “follow the rabbit” 包含 “low”。将项目拆分为单词可以解决此问题。

此外,LINQ join 在内部使用哈希集来搜索第二个序列中的第一个序列项。当您枚举字典的所有条目时,这为您提供了 O(1) 查找速度而不是 O(N)。

关于c# - 搜索字符串数组中包含的字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com