与C# Finding Nearest Number in Array相同,但不一定有数字
我正在考虑创建一个类似于:
的扩展方法public static TSource ClosestTo<TSource>(this IEnumerable<TSource> source
, TSource target
, IComparer<TSource> comparer = null)
当然,我们可以添加从TSource
到int
的转换器,并复制符合int的算法。
但我想知道只用比较就可以实现同样的目的,而不必诉诸于int转换就可以使用Math.Abs
。
答案 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;?您可能构造一些距离概念,但可能存在多个相互竞争的概念,我怀疑您会遇到精确度问题,因为所涉及的字符串越来越长。