检查数值是否与数组中的相同值相邻

时间:2015-08-05 19:55:35

标签: c#

假设我在C#上有这个数组:

int myList = {1,4,6,8,3,3,3,3,8,9,0}

我想知道一个值(比如从0到9)是否在列表中与其自身相邻并且是多少次。在这种情况下,值3与其自身相邻并且具有4次重复。如果我有一个列表{0,1,2,3,5,5,6,7},则值5与其自身相邻并且重复2次。

重复的限制为5.没有值可以重复超过5次。我走的远远是在做if语句,但我知道有更好的方法。

2 个答案:

答案 0 :(得分:0)

问题的标准不是那么好,而是写答案

int lastValue = myList[0];
        int times = 0;
        foreach (int value in myList) {
            if (lastValue == value) {
                times++;
            }
            else if (times <= 1) {
                lastValue = value;
                times = 1;
            }
            else
                break;
        }

您只需迭代列表并保留一个只计算连续重复整数的计数器。

答案 1 :(得分:0)

如果您想要一个更整洁的解决方案,您可能会在morelinq上使用名为nuget的开源库(由Jon Skeet和其他几个人)。它为LINQ提供了有用的扩展方法。

其中一个名为GroupAdjacent,适用于您的问题。

var testList = new[] { 1, 4, 6, 8, 3, 3, 3, 3, 8, 9, 0 };
var groups = testList.GroupAdjacent(t => t);

var groupsWithMoreThanOneMember = groups.Where(g => g.Count() > 1);