所以我今天被问到在一个集合中找到关闭匹配的最佳方法是什么.
例如,你有一个像这样的数组:
1, 3, 8, 10, 13, ...
什么数字最接近4?
集合是数字的,无序的,可以是任何东西.与要匹配的数字相同.
让我们看看我们可以从所选择的各种语言中得到什么.
J中有11个字节:
C=:0{]/:|@-
例子:
>> a =: 1 3 8 10 13 >> 4 C a 3 >> 11 C a 10 >> 12 C a 13
我对外行的细分:
0{ First element of ] the right argument /: sorted by | absolute value @ of - subtraction
更短的Python:41个字符
f=lambda a,l:min(l,key=lambda x:abs(x-a))
我在python中的尝试:
def closest(target, collection) : return min((abs(target - i), i) for i in collection)[1]
Groovy 28B
f={a,n->a.min{(it-n).abs()}}
一些C#Linq的人......有很多方法可以做到这一点!
decimal[] nums = { 1, 3, 8, 12 }; decimal target = 4; var close1 = (from n in nums orderby Math.Abs(n-target) select n).First(); var close2 = nums.OrderBy(n => Math.Abs(n - target)).First(); Console.WriteLine("{0} and {1}", close1, close2);
如果使用列表,则更多的方法,因为普通的ol数组没有.Sort()