C#在通用阵列中找到最近的值?

时间:2018-05-26 07:50:18

标签: c# algorithm search

C# Finding Nearest Number in Array相同,但不一定有数字

我正在考虑创建一个类似于:

的扩展方法
public static TSource ClosestTo<TSource>(this IEnumerable<TSource> source
    , TSource target
    , IComparer<TSource> comparer = null)

当然,我们可以添加从TSourceint的转换器,并复制符合int的算法。

但我想知道只用比较就可以实现同样的目的,而不必诉诸于int转换就可以使用Math.Abs

1 个答案:

答案 0 :(得分:2)

从根本上说,没有 - 该签名没有提供足够的信息来确定&#34;亲密关系&#34;。

IComparer<T>仅允许您比较两个值,以查看一个是大于,小于或等于另一个。没有&#34;距离&#34;。

的概念

使用该签名,您可以返回:

  • target
  • 匹配的值
  • 小于target但小于target
  • 的任何其他值的值
  • 值大于target但小于任何大于target的其他值

假设source不包含任何彼此相等的值。

因此,例如,给定{1,6,3,7,8,10}的输入和4的目标,您可以返回&#34; 3和6&#34; - 但你不能说3比目标更接近目标。

请注意,如果没有&#34;距离&#34;完全在IComparer<T>IComparable<T>。我不知道的任何类似界面都有这个概念。例如,您可以按顺序方式对字符串进行排序,但距离是否在&#34; fox&#34;之间。和&#34;袋熊&#34;?您可能构造一些距离概念,但可能存在多个相互竞争的概念,我怀疑您会遇到精确度问题,因为所涉及的字符串越来越长。