c# - 在列表中查找相似(或相等的连续项目)

标签 c# list

我正在开发让教师对论文进行评分的软件,我需要了解教师是否对连续 3 篇论文给出了相同的评分。基本上我有一个成绩列表:

80,81,90,90,90,100,85,86,86,79,95,95,95

我需要在此列表中识别 90 年代和 95 年代(它们每个都连续给出 3 次)。

PS-对于那些一直将我的帖子标记为“家庭作业”的人来说,仅仅因为我在处理学生和成绩并不意味着这是一项类作业。吉米尼。

最佳答案

你可以很容易地通过循环 i 来做到这一点。从 2 到 list.Length并检查 list[i] == list[i - 1] && list[i - 1] == list[i - 2] .

例如,它可以这样写:

var list = new[] { 80,81,90,90,90,100,85,86,86,79,95,95,95 };
var dupes = new List<int>();
for(var i = 2; i < list.Length; i++) {
    if(list[i] == list[i - 1] && list[i] == list[i - 2])
        dupes.Add(list[i]);
}

[编辑]
这是一个运行示例:http://ideone.com/UGwFwq

如果您不希望在连续有 4 个(或更多)等于时重复报告,防止这种情况发生的一个好方法是简单地将临时变量保留在前一个“连续 3 个”上,并在之前检查你追加到欺骗列表。

像这样的东西:
var list = new[] { 80,81,90,90,90,90,90,90,100,85,86,86,79,95,95,95,95 };
var dupes = new List<int>();
int? prev = null;
for(var i = 2; i < list.Length; i++) {
    if(list[i] == list[i - 1] && list[i] == list[i - 2]) {
        if(!prev.HasValue || prev.Value != list[i]) {
            dupes.Add(list[i]);
            prev = list[i];
        }
    }
}

展示:http://ideone.com/jbokMQ

[编辑 2]
如果由于某种原因您 需要以类似 LINQ 的方式运行它(例如,如果你有一个巨大的数据集或数据流并且你想以一种惰性的方式运行它),可以在这里找到一个解决方案:http://ideone.com/R1ZBVk

关于c# - 在列表中查找相似(或相等的连续项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915614/

相关文章:

c# - 从 JsonResult 中检索对象列表并发送到数据库

c# - 将发布/订阅与 sider redis C# 客户端一起使用

java - 如何在 Java 代码中使用 scala.collection.immutable.List

java - 如何从Java中的List中获取特定的列列表

c++ - 列表中的 std::min_element 不返回最小值

c# - 从 C# 中的 List 或 HashSet 中删除重复项

c# - HRESULT 异常 : 0x80040111 (CLASS_E_CLASSNOTAVAILABLE)

c# - Url.Action 没有将参数传递给索引

c# - 将 PNG 图像打印到 Zebra 网络打印机

python - 具有不同内容的子图的全局图例