【问题标题】:getting sublists out of list by specified start index and rule for other following elements in sublist通过指定的开始索引和规则从列表中获取子列表中其他以下元素的子列表
【发布时间】:2019-08-01 10:26:38
【问题描述】:

我有一个从索引 0 到 19 的 20 条曲线的列表,我想获得它的 5 个具有索引的子列表:

{0,5,10,15},{1,6,11,16},{2,7,12,17},{3,8,13,18},{4,9,14,19}

对于子列表的后续元素,是否有任何通过开始索引和过程来进行子列表的方法。

【问题讨论】:

  • 您可以使用 LINQ 方法来实现它。查看this问题。

标签: c#


【解决方案1】:

对于这样的列表:

List<int> list = new List<int>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };

您可以使用此代码:

List<int> subList1 = list.Skip(0).Where((x, i) => i % 5 == 0).ToList();
List<int> subList2 = list.Skip(1).Where((x, i) => i % 5 == 0).ToList();
List<int> subList3 = list.Skip(2).Where((x, i) => i % 5 == 0).ToList();
List<int> subList4 = list.Skip(3).Where((x, i) => i % 5 == 0).ToList();
List<int> subList5 = list.Skip(4).Where((x, i) => i % 5 == 0).ToList();

或者在for循环中执行:

List<int>[] subLists = new List<int>[5];
for (int i = 0; i < subLists.Length; i++)
{
    subLists[i] = list.Skip(i).Where((x, j) => j % 5 == 0).ToList();
}

Skip(i) 用于选择第一个索引,Where((x, j) =&gt; j % 5 == 0) 用于通过检查索引模 5 是否为零来获取每 5 个元素。

【讨论】:

  • @shershahbach 如果您使用正确的模数,则不需要跳过。看看我的解决方案。
  • @StevenSpyrka:我赞成你的解决方案,它比我的解决方案更聪明、更短、更快。尽管如此,使用两个操作还是有一些价值的:跳过并获取每 5 个元素,因为它使意图更清晰。
【解决方案2】:

这就是你要找的。​​p>

var list = new List<int>();
for(var i = 0; i<=19; i++) list.Add(i);

var list0 = list.Where(x => x % 5 == 0).ToList();
var list1 = list.Where(x => x % 5 == 1).ToList();
var list2 = list.Where(x => x % 5 == 2).ToList();
var list3 = list.Where(x => x % 5 == 3).ToList();
var list4 = list.Where(x => x % 5 == 4).ToList();

【讨论】:

    【解决方案3】:

    您可以在列表上使用循环并将索引取模 5 来获取子列表的索引,然后将元素添加到其中。

    例子:

    public static void Main(string[] args)
    {
        List<int> outerList = new List<int>();
        for (int i = 0; i < 20; i++)
        {
            outerList.Add(i);
        }
    
        List<List<int>> innerLists = new List<List<int>>();
        for (int i = 0; i < 5; i++)
        {
            innerLists.Add(new List<int>());
        }
    
        for (int i = 0; i < outerList.Count; i++)
        {
            innerLists[i % 5].Add(outerList[i]);
        }
    
        Console.WriteLine("outer List:");
        foreach (int i in outerList)
        {
            Console.Write($" { i } ");
        }
        Console.WriteLine();
    
        Console.WriteLine("inner List:");
        foreach (List<int> l in innerLists)
        {
            foreach (int i in l)
            {
                Console.Write($" { i } ");
            }
            Console.WriteLine();
        }
        Console.WriteLine();
    
        Console.Read();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-03
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多