当前位置: 首页 > 知识库问答 >
问题:

使用linq按条件和顺序群集项

宣望
2023-03-14
int delta = 3;    
var numbers = new List<int>() { 2, 4, 9, 6, 3, 2, 7, 7, 4, 1, 9, 1, 2 };    
var g = numbers.GroupBy(n => n <= delta);

这给出了基于条件的两组。我想要的是:

g1: 2
g2: 4, 9, 6
g3: 3, 2
g4: 7, 7, 4
g5: 1
g6: 9
g7: 1, 2

编辑条件是根据一个条件(这里是number<=delta),对它们进行分组,但每个组应该只包含第一个列表中相邻的数字。

共有1个答案

汝开畅
2023-03-14

如果我理解逻辑,您希望在项目n通过条件但项目n-1失败时创建一个新组,或者反之亦然。

通常情况下,您不会使用Linq进行这种操作。您必须一次一个项目地迭代循环,然后自己构建结果集。例如:

List<int> list = null;
var result = new List<IEnumerable<int>>();
bool? prev = null;
foreach (var n in numbers)
{
    bool cur = n <= 3;
    if (prev != cur)
    {
        list = new List<int>();
        result.Add(list);
        prev = cur;
    }
    list.Add(n);
}

但在LINQ中有一个可行的解决方案。这取决于站点效应,您通常应该避免:

var prev = numbers.First() <= delta;
var counter = 0;
var result = numbers.GroupBy(n => (prev != (prev = n <= delta)) ? ++counter : counter)
                    .ToList();
 类似资料:
  • 本文向大家介绍使用JavaScript按顺序检索对象的条目?,包括了使用JavaScript按顺序检索对象的条目?的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的对象- 使用方法按顺序检索对象的条目- 示例 要运行以上程序,您需要使用以下命令- 输出结果 在这里,我的文件名为demo146.js。这将产生以下输出-

  • 我在一个返回一个巨大选择的过程中工作,我不想定义它是如何排序的。我不想从三个字段中选择一个,如果它是升序还是降序,如果三个选项都没有定义,它会默认返回降序中的第一个字段 这边 当然,这不起作用... mysql指责单词DESC和ASC中的错误,我怎么能让这个工作??

  • 假设我有2个数据帧: DF1: Col1 | Col2 | Col3 XCN000370/17-18C|XCN0003711718C|0003971718 DF2 Col1 | Col2 | Col3 XCN0003711718C|XCN0003711718C|0003971718 我希望它们像这样合并: 首次匹配Col1(DF1)和Col1(DF2) 在保持不匹配的情况下,将Col1(DF1)与

  • {1,2,3}的幂集是: {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}} 我有一个java字符串数组, 如何按数学顺序打印此数组的幂集?(我试过位操作方法,它没有按该顺序给出解决方案!) 我的位操作方法!没有给出所需的结果!