c# – 按内容大小拆分double的集合
发布时间:2020-12-15 21:45:55 所属栏目:百科 来源:网络整理
导读:我有一个数字集合(集合),它可以是任何大小,包含负数和正数.我试图根据一些标准将其拆分.从集合中的第一个数字开始,我想制作一个集合,而这个数字高于-180且低于180.任何高于180的数字都会进入一个新的集合,或者任何低于-180的数字都会进入一个新的集合.如果数
我有一个数字集合(集合),它可以是任何大小,包含负数和正数.我试图根据一些标准将其拆分.从集合中的第一个数字开始,我想制作一个集合,而这个数字高于-180且低于180.任何高于180的数字都会进入一个新的集合,或者任何低于-180的数字都会进入一个新的集合.如果数字再次在可接受的参数范围内,则会再次进入新的集合.问题是收藏品需要保持秩序.
例如. 收集100: >前50个介于180和-180之间. 从上面的集合中,我现在应该有4个单独的集合,其顺序与原始的1个集合相同. >第一个集合编号,原始顺序介于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]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |