加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否可以根据序列对LINQ元素进行分组?

发布时间:2020-12-16 01:57:45 所属栏目:百科 来源:网络整理
导读:我一直想知道;在我工作的公司,我们管理大量数据,但由于它是由客户有效地提供给我们的,我们并不一定信任它 – 有充分的理由.其中很多都有错误的时间戳,或者其中一些缺失,或者其他任何你有. 我最近必须完成的任务之一基本上是查找在一组元素中为null的元素,然
我一直想知道;在我工作的公司,我们管理大量数据,但由于它是由客户有效地提供给我们的,我们并不一定信任它 – 有充分的理由.其中很多都有错误的时间戳,或者其中一些缺失,或者其他任何你有.

我最近必须完成的任务之一基本上是查找在一组元素中为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的使用在这里没有提供任何真正的优势.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读