如何从 C# 中的元组列表中获取最接近“a”的 4 个元素?
Posted
技术标签:
【中文标题】如何从 C# 中的元组列表中获取最接近“a”的 4 个元素?【英文标题】:How to get 4 closest to "a" elements from the list of tuples in C#? 【发布时间】:2020-09-07 07:23:15 【问题描述】:我有一个元组列表List<(double X, double Y)> Data
和a
类型为double
的变量。需要将最接近a
的4 个元素添加到数组(double, double)[] output
。它们需要在所有Data.X
中找到。需要按照与a
的距离顺序排列数据。
例子:
输入:
a = 15.5;
(-10, 1),
(12, 2),
(14, 3),
(16, 4),
(50, 5)
输出:
output [0] = (16, 4);
output [1] = (14, 3);
output [2] = (12, 2);
output [3] = (-10, 1);
编辑:我目前的解决方案:
class CubicSpline
List<(double X, double Y)> Data get; set;
public CubicSpline(List<(double X, double Y)> data)
Data = data;
/// <summary>
/// Method for finding 4 nearest neighbors for x.
/// </summary>
public (double, double)[] FindNeighbours(double x)
var temp = Data.OrderBy(b => Math.Abs(x - b.X)).ToList();
(double, double)[] output = new (double, double)[4];
for(int i = 0; i < 4; i++)
output[i] = temp[i];
return output;
【问题讨论】:
请分享您的代码并说明您遇到的问题 @PavelAnikhouski 您好,感谢您的回复。我坚持不知道linq。代码中有这样的实现,但它不能与负值正常工作。 pastebin.com/ftrZtERH 请提供计算最接近值的逻辑。 如何测量从单个值(a
)到点元组((14,3)
)的距离?
@NetMage 我只比较 X。Y 被忽略
【参考方案1】:
由于您开始使用 LINQ,您可以使用其他一些 LINQ 方法来计算结果:
public (double, double)[] FindNeighbours(double x) =>
Data.OrderBy(b => Math.Abs(x - b.X)).Take(4).ToArray();
【讨论】:
以上是关于如何从 C# 中的元组列表中获取最接近“a”的 4 个元素?的主要内容,如果未能解决你的问题,请参考以下文章