linq C#中如何< int>用函数式方法从一个表中选择n个有重叠的独立< int>表

gblwokeq  于 2022-12-06  发布在  C#
关注(0)|答案(2)|浏览(102)

在C#中,我有一个如下列表:

var sequence = new List<int> { 10, 7, 10, 1, 10, 5, 10, 8 , 11 , 50 };

我想创建10个单独的列表,通过迭代序列,并在每次迭代中选择三个元素,而不是一个元素。

我为此编写了下面的代码,但它有缺陷,必须是一个更好的方式做到这一点:

var sequence = new List<int> { 10, 7, 10, 1, 10, 5, 10, 8 , 11 , 50 };
var lists = Enumerable.Range(0, 10)
        .Select(i =>
        {
            var list = sequence.GetRange(i, 3);
            return list;
        }).ToList();

P. S.:功能的方式我的意思是这样的东西:

var lists = Sequence.Window(sourceSafed.Skip(1)).....Select(window => window.Take(3))......ToList();
nx7onnlm

nx7onnlm1#

正如前面的评论所说,你的代码并没有什么真正的问题。为了让它看起来更像LINQish,你可以这样写:

var sequence = new List<int> { 10, 7, 10, 1, 10, 5, 10, 8 , 11 , 50 };
var lists = Enumerable.Range(0, 10)
    .Select(i => sequence.Skip(i).Take(3))
    // If for further usage it makes sense to materialize each subset
    //.Select(i => sequence.Skip(i).Take(3).ToList())
    .ToList();
9q78igpj

9q78igpj2#

你可以用这个方法来提问。

List<int> sequence = new List<int>() { 10, 7, 10, 1, 10, 5, 10, 8 , 11 , 50 };
for (int i = 0; i < sequence.Count-1; i++)
{
   var lists= sequence.Skip(i).Take(3).ToList();
   foreach (var x in lists)
   {
     Console.Write(x);
   }
   Console.WriteLine();
}

或者您可以使用此代码Linq

List<int> sequence = new List<int>() { 10, 7, 10, 1, 10, 5, 10, 8 , 11 , 50 };
for (int i = 0; i < sequence.Count - 1; i++)
{
  sequence.Skip(i).Take(3).ToList().ForEach(x => Console.Write(x));
  Console.WriteLine();
}

相关问题