Compare two list elements with LINQ

后端 未结 5 1560
一生所求
一生所求 2021-01-13 07:42

I\'m trying to find a LINQ expression to compare two list elements.

What i want to do is:

List _int = new List { 1, 2, 3, 3, 4,         


        
相关标签:
5条回答
  • 2021-01-13 08:13

    If you really want to do it with a lambda expression, add a bound check (that either always returns the last element or never, your choice).

    An iterative approach would be more readable though, IMO.

    0 讨论(0)
  • 2021-01-13 08:14

    It's an interesting problem, I would perhaps go for query expression syntax where it can be done like this

    int[] array = {1,2,3,3,4,5};
    var query = from item in array.Select((val, index) => new { val, index })
                join nextItem in array.Select((val, index) => new { val, index })
                on item.index equals (nextItem.index + 1)
                where item.val == nextItem.val
                select item.val;
    

    Which would extract 3 from the array (or list). Of course, what can be done in query expression can obviously be done in lambda.

    Edit Joel's solution is much simpler than mine and if you just need it to work on a List or an array, it is perfect. If you need something more flexible to work against any IEnumerable, then you would aim for something like the above (or something obviously better).

    0 讨论(0)
  • 2021-01-13 08:25
    List<int> _int = new List<int> { 1, 2, 3, 3, 4, 5 };
    Enumerable.Range(0, _int.Count - 1)
        .Select(i => new {val = _int[i], val2 = _int[i + 1]})
        .Where(check => check.val == check.val2)
        .Select(check => check.val);
    
    0 讨论(0)
  • 2021-01-13 08:28
    int i = 0;
    _int.Where(x => 
    {
        i++;
        return i < _int.Length && x == _int[i];
    });
    
    0 讨论(0)
  • 2021-01-13 08:32

    Not that nice but should work.

    list.Where((index, item) => index < list.Count - 1 && list[index + 1] == item)
    

    Or the following.

    list.Take(list.Count - 1).Where((index, item) => list[index + 1] == item)
    
    0 讨论(0)
提交回复
热议问题