【发布时间】:2011-07-11 16:46:22
【问题描述】:
我想将 C# 中的序列拆分为使用 LINQ 的序列序列。我进行了一些调查,我发现与此稍有关联的最接近的 SO 文章是 this。
但是,这个问题只问如何根据常数值对原始序列进行分区。我想根据一个操作对我的序列进行分区。
具体来说,我有一个包含小数属性的对象列表。
public class ExampleClass
{
public decimal TheValue { get; set; }
}
假设我有一个ExampleClass的序列,而TheValue对应的值序列是:
{0,1,2,3,1,1,4,6,7,0,1,0,2,3,5,7,6,5,4,3,2,1}
我想将原始序列划分为IEnumerable<IEnumerable<ExampleClass>>,其值为TheValue,类似于:
{{0,1,2,3}, {1,1,4,6,7}, {0,1}, {0,2,3,5,7}, {6,5,4,3,2,1}}
我只是不知道如何实施。所以,你能帮忙吗?
我现在有一个非常丑陋的解决方案,但有一种“感觉”,即 LINQ 会增加我的代码的优雅度。
【问题讨论】:
-
所以你需要把它分成几个单调的子序列?
-
是什么让它以这种方式划分值?似乎没有任何明显的推理,除了它们都是升序直到最后一个。你追求单调序列吗?
-
在这种情况下,单调意味着无聊,还是有特定的技术含义?
-
@jon- 我要解决的问题是根据 TheValue 改变其方向来划分原始序列。例如,子序列只能增加或保持相同的值,或者减少或保持相同的值。在这种情况下,集合 {0,1,0,4,5} 不是合法的子序列。这有意义吗?
-
是的,这正是我想要做的——创建一个单调序列。另外,乔恩,感谢您对此线程的评论。你的书很棒。 :D