我正在审查一些人编写的代码,并且很难理解为什么他们会以这种方式找到最大值的密钥.有人可以解释一下,让我知道哪一个更好"更好",更快?(如果有的话)
仅供参考,这用于模态值计算.
原始方法(我不完全理解第二个foreach循环):
// Begin Calculating the Modal Value
Dictionary<double, double> counts = new Dictionary<double, double>();
foreach (double cond_value in condDataToDouble)
{
if (counts.ContainsKey(cond_value))
{
counts[cond_value] = counts[cond_value] + 1;
}
else
{
counts[cond_value] = 1;
}
}
sourceMode = double.MinValue;
double maxVal = double.MinValue;
// Get the Max (modal) Value:
foreach (double key in counts.Keys)
{
if (counts[key] > maxVal)
{
maxVal = counts[key];
sourceMode = key;
}
}
Run Code Online (Sandbox Code Playgroud)
我的方法:
// Begin Calculating the Modal Value
Dictionary<double, double> counts = new Dictionary<double, double>();
foreach (double cond_value in condDataToDouble)
{
if (counts.ContainsKey(cond_value))
{
counts[cond_value] = counts[cond_value] + 1;
}
else
{
counts[cond_value] = 1;
}
}
// Get the Max (modal) Value:
sourceMode = counts.OrderByDescending(x => x.Value).First().Key;
Run Code Online (Sandbox Code Playgroud)
我主要担心的是,我只是不明白他们在做什么,我想学习.我理解我的方式至少在代码长度方面更简洁.我知道这并不一定会让它变得"更好".有人可以帮忙解释一下吗?
我正在审查一些人编写的代码,并且很难理解为什么他们会以这种方式找到最大值的密钥.
你可以考虑问那个人.
有人可以解释一下,让我知道哪一个更好"更好",更快?(如果有的话)
为什么"更快"更好?首先,我们甚至不知道任何一段代码是正确的.其次,除了速度之外,还有许多更好的指标.
第三,如果你想知道两件事中哪一件更快,那么用秒表运行它们然后你就会知道.
第四,哪个更快是无关紧要的; 相关的问题是它们中的哪一个太慢了?
有人可以帮忙解释一下吗?
我的建议是在调试器中运行你不理解的代码; 这将有助于您了解它的工作原理.
另一个好建议是考虑如何解决计算机领域之外的问题.在这里,我有一百万张卡片,每张卡片都带有任意大小的数字.我打算拿走上千张卡片,洗牌,并要求你找到最大的卡片.你会如何解决这个问题?你会通过完全整理千张卡然后取得最高价来解决这个问题吗?或者有更快的方法吗?如果你能找到一种更快的方法来找到除了排序之外的数千张卡上最大的数字,你就可以理解第一种算法是如何工作的.