C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 是否可以根据序列对LINQ元素进行分组?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直想知道;在我工作的公司,我们管理大量数据,但由于它是由客户有效地提供给我们的,我们并不一定信任它 – 有充分的理由.其中很多都有错误的时间戳,或者其中一些缺失,或者其他任何你有.

我最近必须完成的任务之一基本上是查找在一组元素中为null的元素,然后找到下一个非null元素,然后平均这些空记录之间的差异.也就是说,我们有数据集A:

A = { 0f,1f,2f,5f,Null,7f,8f }

重要的是要注意我们必须区分0和Null.显然差异是0是0,而Null根本就没有数据.

使用LINQ,我们可以基本上访问A的以下小节:

Subsection { Null,7f }

并将它放在一个集合中,以便我们可以将它转换为(7 / 4f)四个记录.

Subsection { 1.75f,1.75f,1.75f }

这样当再次迭代A时,我们得到以下输出

{ 0f,4f,4f }

目前我这样做的方法是使用数字for进行传递,查找null元素,然后将所有连续的空值存储在List< T>中,并在找到下一个非null后,通过遍历所述List&lt分配所有变量; T&GT ;.它做的工作,但它看起来很讨厌.

因此,为了narcicissim,有没有一种方法可以做到这一点(=更少的代码混乱)?

a = { 0,1,2,5,null,7,0 }


nullList = new List()
for i = 0,a.length
    if i == null
        nullList.add(i)
    else
        if nullList.length > 0
            nullList.add(i)
            int avg = nullList.Aggregate(x => X)
            foreach element in nullList
                element = avg
            nullList.clear()

解决方法

如果我正确理解您的问题,您希望使用基于第一个非NULL值的值替换列表中的空值.我不明白为什么你需要第二个空值列表.这是尝试只是就地修改列表,然它没有你已经拥有的那么短:

var A = new List<float?> { 0f,8f };

for (int i = A.IndexOf(null); i != -1; i = A.IndexOf(null,i))
{
    int j = 0;
    do { j++; } while (A[i + j] == null);
    float f = A[i + j].Value / (j + 1);
    do { A[i++] = f; } while (j --> 0);
}

// A == { 0f,4f }

代码重复搜索列表中的空值(在它之前发现空值的情况下继续它的位置),计算彼此相邻的空值数,然后在空隙中分配第一个非空值.该代码假定每个间隙后总是存在非空值.

正如许多评论中所指出的,LINQ的使用在这里没有提供任何真正的优势.

大佬总结

以上是大佬教程为你收集整理的c# – 是否可以根据序列对LINQ元素进行分组?全部内容,希望文章能够帮你解决c# – 是否可以根据序列对LINQ元素进行分组?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。