How to group items by index? C# LINQ

前端 未结 5 712
离开以前
离开以前 2020-12-29 06:22

Suppose I have

var input = new int[] { 0, 1, 2, 3, 4, 5 };

How do I get them grouped into pairs?

var output = new int[][] {         


        
相关标签:
5条回答
  • 2020-12-29 06:29
    var indexedNumbers = input.Select((number, index) => new { Index = index, Number = number });
    
    var pairs =
        from indexedNumber in indexedNumbers
        group indexedNumber by indexedNumber.Index / 2 into indexedNumberPair
        select indexedNumberPair.Select(indexedNumber => indexedNumber.Number);
    
    var arrays = pairs.Select(pair => pair.ToArray()).ToArray();
    
    0 讨论(0)
  • 2020-12-29 06:34

    Using ToLookup method:

    input
        .Select((number, index) => new { index , number})
        .ToLookup(_ => _.index / 2, _ => _.number)
        .Select(_ => _.ToArray())
        .ToArray();
    

    Using Zip method:

    input
        .Zip(input.Skip(1), (_, __) => new[] {_, __})
        .Where((_, index) => index % 2 == 0)
        .ToArray();
    
    0 讨论(0)
  • 2020-12-29 06:35

    Probably not applicable to you, but you could use the new Zip method in C# 4.0

    
    var input = new int[] { 0, 1, 2, 3, 4, 5 };
    IEnumerable evens = input.Where((element, index) => index % 2 == 0);
    IEnumerable odds = input.Where((element, index) => index % 2 == 1);
    var results = evens.Zip(odds, (e, o) => new[] { e, o }).ToArray();
    
    
    0 讨论(0)
  • 2020-12-29 06:39
    var input = new int[] { 0, 1, 2, 3, 4, 5 };
    int i = 0;
    var output = input.GroupBy(item => i++ / 2);
    
    0 讨论(0)
  • 2020-12-29 06:51
    input
       .Select((value, index) => new { PairNum = index / 2, value })
       .GroupBy(pair => pair.PairNum)
       .Select(grp => grp.Select(g => g.value).ToArray())
       .ToArray()
    
    0 讨论(0)
提交回复
热议问题