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

c# – 按内容大小拆分double的集合

发布时间:2020-12-15 21:45:55 所属栏目:百科 来源:网络整理
导读:我有一个数字集合(集合),它可以是任何大小,包含负数和正数.我试图根据一些标准将其拆分.从集合中的第一个数字开始,我想制作一个集合,而这个数字高于-180且低于180.任何高于180的数字都会进入一个新的集合,或者任何低于-180的数字都会进入一个新的集合.如果数
我有一个数字集合(集合),它可以是任何大小,包含负数和正数.我试图根据一些标准将其拆分.从集合中的第一个数字开始,我想制作一个集合,而这个数字高于-180且低于180.任何高于180的数字都会进入一个新的集合,或者任何低于-180的数字都会进入一个新的集合.如果数字再次在可接受的参数范围内,则会再次进入新的集合.问题是收藏品需要保持秩序.

例如.

收集100:

>前50个介于180和-180之间.
>接下来的20个低于-180
>接下来的20个都在180以上
>最后10个在180到-180之间

从上面的集合中,我现在应该有4个单独的集合,其顺序与原始的1个集合相同.

>第一个集合编号,原始顺序介于180和-180之间
>第二个集合编号,原始顺序低于-180
>原始订单中的第三个收集编号高于180
>第四个集合编号,原始顺序介于180和-180之间

我做了一个尝试,我有什么不起作用,是一个令人讨厌的if语句混乱.我不太了解linq,但我认为使用它可能会有更优雅的解决方案.任何人都可以帮我这里,或者向我展示如何创建一个linq语句,或者建议如何让我的if语句工作,如果这是最好的方法.

Collection<Tuple<Collection<double>,int>> collectionOfDataSets = new Collection<Tuple<Collection<double>,int>>();
Collection<double> newDataSet = new Collection<double>();
for (int i = 0; i < dataSet.Count; i++) {
    if (dataSet[i] < 180 && dataSet[i] > -180) {
        newDataSet.Add(dataSet[i]);
    } else {
        Tuple<Collection<double>,int> lastEntry = collectionOfDataSets.LastOrDefault(b => b.Item2 == i--);
        if (lastEntry != null){
            lastEntry.Item1.Add(dataSet[i]);
        }
        double lastInLastCollection = collectionOfDataSets.ElementAtOrDefault(collectionOfDataSets.Count).Item1.Last();
        if (newDataSet.Count > 0 && lastInLastCollection!= dataSet[i]){
            collectionOfDataSets.Add(new Tuple<Collection<double>,int>(newDataSet,i));                        
        }
        newDataSet = new Collection<double>();
    }
}

提前感谢您的任何帮助.

解决方法

你的例子很复杂.我将首先陈述并解决一个更简单的问题,然后使用相同的方法来解决您的原始问题.

我想将一个数字列表分成连续的偶数和奇数组.例如,鉴于列表2,2,4,3,6,2我会将其分为三组[2,4],[3],[6,2]

这可以使用GroupAdjacentBy方法简洁地完成

> var numbers = new List<int>{2,2};
> numbers.GroupAdjacentBy(x => x % 2)
[[2,2]]

要解决您的问题,只需使用您的分类函数替换上面的奇偶分类函数:

> var points = new List<int>{-180,180};
> var f = new Func<int,int>(x => points.BinarySearch(x));
> var numbers = new List<int>{6,-50,100,190,200,20};
> numbers.GroupAdjacentBy(f)
[[6,100],[190,200],[20]]

(编辑:李大同)

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

    推荐文章
      热点阅读