检查List <string>中的分组值

时间:2015-07-24 18:36:24

标签: c#

在我的一个程序中,我需要检查列表中的项目分组。所以我的值为List<string>。这是一个示例列表(按此顺序):

女性&#39; S
女子39; S
女子39; S
女子39; S
女子39; S
男子39; S
男子39; S
男子39; S
男子39; S
妇女&#39; S

我想检查的是这个列表的分组。因此,底部的女性不应该。这是一个错误的分组。

我可以对此列表进行排序,因为会有一个特定的订单,它不像上面的列表那样简单(并且可以超过2个不同的值)并且总是不同的。但是,仍然需要维护分组

我想要做的就是找到错误的分组并显示错误。我希望有更好的方法来做到这一点,而不是像疯了一样循环。谢谢!

3 个答案:

答案 0 :(得分:1)

foreach (string item in list.Distinct())
{
    int startIndex = list.IndexOf(item);
    int endIndex = list.LastIndexOf(item);

    bool notGrouped = Enumerable.Range(startIndex, endIndex - startIndex + 1).Select(index => list[index]).Any(i => i != item);
    if (notGrouped)
    {
        // show message for the current item
    }
}

答案 1 :(得分:1)

您应该可以通过循环浏览项目并跟踪HashSet<string>中显示的唯一项目以及之前的值来实现此目的。

string previous = items.FirstOrDefault();
var seen = new HashSet<string>();
seen.Add(previous);

for (int i = 1; i < items.Count; i++)
{
    if (previous != items[i])
    {
        if (!seen.Add(items[i]))
        {
            Console.WriteLine("This item is not grouped:" + items[i] + " at index " + i);
        }

        previous = items[i];
    }
}

答案 2 :(得分:1)

如果我理解正确的话:

List<string> orgList = .......;
bool ok = orgList.GroupBy(x => x).SelectMany(x => x).SequenceEqual(orgList);