C# 按x%在类似数字列表中查找一个数字
我有下面的数字列表,其中我需要找到一个满足最接近匹配数字的最小值和最大值之间5%差异的数字,并计算其平均值 输入列表 [2500、2510、7000、7500、1000、1200、2460] 预期产出 2500+2510+2460/3=2490 此处最小值为2460,最大值为2510,差值为50,小于2460的5%,即123C# 按x%在类似数字列表中查找一个数字,c#,.net,algorithm,search,.net-core,C#,.net,Algorithm,Search,.net Core,我有下面的数字列表,其中我需要找到一个满足最接近匹配数字的最小值和最大值之间5%差异的数字,并计算其平均值 输入列表 [2500、2510、7000、7500、1000、1200、2460] 预期产出 2500+2510+2460/3=2490 此处最小值为2460,最大值为2510,差值为50,小于2460的5%,即123 var numbers = new int[]{ 2500, 2510, 7000, 7500, 1000, 1200, 2460}; var orderedNum
var numbers = new int[]{ 2500, 2510, 7000, 7500, 1000, 1200, 2460};
var orderedNumbers = numbers.OrderBy(x => x).ToList();
var numbersToConsider = ???? //2500, 2510, 2460 that they are similar with in 5% range
我坚持在这里找到数字
我需要找到一个相似的。基本上,这些数字是每月的贷款支付和一些其他费用。贷款支付额可能会有x%的变化,大部分不到5%。现在我需要从列表中计算出这些贷款付款,并取平均值
avg
min=avg-5%
max=avg+5%
min
和max
const int maxPercentage = 5;
List<int> numbers = new List<int>{2500, 2510, 7000, 7000, 7500, 1000, 1200, 2460};
List<List<int>> closeNumbers = new List<List<int>>();
foreach (int i in numbers.OrderBy(i => i))
{
if(closeNumbers.Count == 0)
{
closeNumbers.Add(new List<int> {i});
continue;
}
List<int> lastCloseNumbers = closeNumbers.Last();
int maxDistance = (int)(lastCloseNumbers.Average() / 100.0 * maxPercentage);
if(i - lastCloseNumbers.Last() <= maxDistance)
lastCloseNumbers.Add(i);
else
closeNumbers.Add(new List<int> {i});
}
你到底在哪里被卡住了?为什么要订购这些数字?我们如何在5%中找到这些数字2500、2510、2460range@MrSmith42订购可能有助于找到它们。基本上,我需要计算两个数字之间的距离并应用我的条件。但是我需要迭代所有的项目,我想你似乎在你的数据中搜索集群,它们的相似性是95%,不是吗?这真的帮助了我:)我们如何在接近数字列表中得到7000和7500?他们没有5%的差异。为了更清楚地了解我想要实现的目标,我更新了有问题的用例:)@Developer:最后两个值的总和是14500,5%是725,但它们的差值是500。我不是在寻找两个值的5%的总和。它基本上是每个列表中最小值和最大值之间5%的差异。你救了我一天!在过去的两天里,我一直在尝试这个逻辑,但我坚持认为:)我接受这个逻辑answer@Developer:也许你想要平均值的5%,而不是总和。编辑它
1000
1200
2460
2500
2510
7000
7000
7500