是否可以使用 Linq 查找集合中元素之间的关系



我有一个数据列表,我想找到列表中相等的最长元素序列的长度。 这很容易通过集合上的循环来实现,但是我想知道是否有一个 Linq 查询可以做到这一点。 感谢您的帮助。

var longest = list.Select((x,i) => list.Skip(i).TakeWhile(c => c == x).Count()).Max();

只需循环访问序列,当项目等于前一个项目时递增计数器,如果不是,则重置它。

public static int LongestSequence<T>(IEnumerable<T> source, IEqualityComparer<T> comparer)
{
    comparer = comparer ?? EqualityComparer<T>.Default;
    using (var iterator = source.GetEnumerator())
    {
        if (!iterator.MoveNext()) //empty sequence
            return 0;
        T previous = iterator.Current;
        int count = 1;
        int maxCount = 1;
        while (iterator.MoveNext())
        {
            if (comparer.Equals(iterator.Current, previous))
            {
                count++;
            }
            else
            {
                maxCount = Math.Max(maxCount, count);
                count = 1;
                previous = iterator.Current;
            }
        }
        return maxCount;
    }
}

相关内容

  • 没有找到相关文章

最新更新