C# 使用数组对最近数进行排序

C# 使用数组对最近数进行排序,c#,arrays,sorting,C#,Arrays,Sorting,有一个数组 int[] array = new int[]{6,4,10,7,7,9}; 还有8号 我想按最接近的数字对数组进行8左右的排序 最接近的数字分别为9,7,7,10,6,4 因为9-1=8,7+1=8,7+1=8,10-2=8,6+2=8,4+4=8 我如何对这些数字进行排序。 有什么想法吗?var result=array.OrderBy(i=>Math.Abs(i-value)) var result = array.OrderBy(i => Math.Abs(i - v

有一个数组

int[] array = new int[]{6,4,10,7,7,9};
还有8号

我想按最接近的数字对数组进行8左右的排序

最接近的数字分别为9,7,7,10,6,4

因为9-1=8,7+1=8,7+1=8,10-2=8,6+2=8,4+4=8

我如何对这些数字进行排序。 有什么想法吗?

var result=array.OrderBy(i=>Math.Abs(i-value))
var result = array.OrderBy(i => Math.Abs(i - value))
             .ThenBy(i => i < value)
             .ToArray();
.ThenBy(i=>i
如果确实需要数组,可以调用
ToArray

如果你真的想对数组进行适当的排序,你可以创建一个自定义的比较器对象并使用
array.sort
,但这需要更多的工作

var array = new int[] { 6, 4, 10, 7, 7, 9 };
int target = 8;
var values = array.OrderBy(i => Math.Abs(i - target)).ToArray();

编辑我很快就得到了这个答案,然后用验证码问我是否是人类来阻止我。非常感谢!:)

如果差值相同,OP不希望将大于目标值的数字放在小于目标值的数字之前吗?是的,也就是说,这会产生
7,7,9,6,10,4
,但OP希望
9,7,7,10,6,4
@devdigital:在您评论之前更正。不管怎样,既然OP没有提到这一点,为什么要投反对票呢?这可能只是个坏例子。@TimSchmelter啊,忘记刷新了+1@devdigital事实上,一个手写的例子恰好遵循了这一行为,但这并不构成定义的一部分。当行为未定义时,我不反对添加额外的排序,但要求似乎不合适。可能。因为我记得一个类似的问题,它的可能重复也是来自
user1328639
的同一个问题,非常好answers@L.B当前位置虽然我已经投票决定关闭,但这不是重复。他想要的是最接近的值,这里按距离给定值的顺序排列。没有更多的工作:
Array.Sort(Array,(a,b)=>{int c=Math.Abs(n-a).CompareTo(Math.Abs(n-b));返回c!=0?c:b.CompareTo(a);}
@digEmAll
Array.Sort
不需要
Func
它需要
IComparer
。lambda没有实现那个接口。实际上,有一种重载,它接受一个委托-->。此外,我还测试了这行代码;)嗯,我以前没见过这个。谢谢你的链接。是的,验证码很痛苦,但这会产生7,7,9,6,10,4,OP需要9,7,7,10,6,4。他的示例输出就是这样的顺序,但他并没有说他必须按照那个顺序来做。鉴于这是他第二次发布这个问题,而这两个问题之间的唯一区别是他按照那个特定的顺序添加了数字,那么他必须按照那个顺序来做。但我不是挑剔,我只是说。。。
var array = new int[] { 6, 4, 10, 7, 7, 9 };
int target = 8;
var values = array.OrderBy(i => Math.Abs(i - target)).ToArray();