在我的一个程序中,我需要检查列表中的项目分组。所以我的值为List<string>
。这是一个示例列表(按此顺序):
女性&#39; S
女子39; S
女子39; S
女子39; S
女子39; S
男子39; S
男子39; S
男子39; S
男子39; S
妇女&#39; S
我想检查的是这个列表的分组。因此,底部的女性不应该。这是一个错误的分组。
我可以对此列表进行排序,因为会有一个特定的订单,它不像上面的列表那样简单(并且可以超过2个不同的值)并且总是不同的。但是,仍然需要维护分组。
我想要做的就是找到错误的分组并显示错误。我希望有更好的方法来做到这一点,而不是像疯了一样循环。谢谢!
答案 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);