gpt4 book ai didi

c# - LinQ:C# 在使用一些过滤器复制时对数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 23:09:04 25 4
gpt4 key购买 nike

我有这样的情况,我必须获取数组的非零值,对它们进行排序并找到值的中值。我做了如下,

var array2 = (from t in array1 where t.array2 != 0 select t.array2).ToArray();
Array.Sort(array2);
var Median = array2.Length % 2 == 0 ? new List<double>() { ((array2[array2.Length / 2 - 1]) + (array2[array2.Length / 2])) / 2 } : new List<double>() { array2[array2.Length / 2] };

目前一切顺利。但我正在考虑将前两行合并为一行,例如使用 orderby 方法复制非零值。为此,我尝试过,

var array2 = (from t in ipedsTableValue where t.array2 != 0 select t.array2).ToArray(t); // Not worked

如果有任何 super 方法可以在 C# 中计算数组的中位数,也建议我,因为那条线看起来也很大,恐怕不容易阅读。

我引用了 SO 资源:Add a Median Method to a List虽然它工作正常,但我正在考虑一些代码数量较少的简单高效的代码。任何建议都会有所帮助!

最佳答案

您可以使用 linq 和条件运算符。

var filterd = array1
.Where(x => x.array2 != 0)
.Select(x => x.array2)
.OrderBy(x => x)
.ToArray();

var length = filterd.Length;

var median = length % 2 == 0
? (filterd[length / 2 - 1] + filterd[length / 2]) / 2.0
: filterd[length / 2];

关于c# - LinQ:C# 在使用一些过滤器复制时对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125847/

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