如何从 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)> Dataa 类型为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 个元素?的主要内容,如果未能解决你的问题,请参考以下文章

列表理解列表中的元组列表

从字符串和整数的元组,得到元组内最接近给定值的数字

如何从具有子元组的元组创建列表?

Python中的元组和列表

如何从python中的列表中删除重复的元组?

Python中的元组(Tuple)