gpt4 book ai didi

C# 在泛型数组中寻找最近的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:18 24 4
gpt4 key购买 nike

同于: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​​

最佳答案

从根本上说,不——该签名没有提供足够的信息来确定“接近度”。

IComparer<T>只允许您比较两个值以查看一个值是否大于、小于或等于另一个值。没有“距离”的概念。

有了那个签名你可以返回:

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

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

因此,例如,给定输入 { 1, 6, 3, 7, 8, 10 } 和目标 4,您可以返回“3 和 6”——但您无法判断 3 更接近目标比 6 是。

请注意,在 IComparer<T> 中根本没有“距离”概念的情况下,值可能会像这样具有可比性或 IComparable<T> .我不知道有任何类似的界面确实有这个概念。例如,您可以按顺序对字符串进行排序,但“fox”和“wombat”之间的距离会是多少?您可能构建一些距离概念,但可能存在多个相互竞争的概念,而且我怀疑随着所涉及的字符串变得越来越长,您会遇到精度问题。

关于C# 在泛型数组中寻找最近的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50540578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com