我试图获得每个学生的相同日期总数。我已将日期时间转换为星期几(int)。 GetAllInfo从其他类接收所有需要的数据。然后GetTimeExercises使用这些数据。
列表中的数据示例ExercisesWithTime:(291,5)(301,5)(291,5)
291是学生ID,5是星期几。
现在我想计算列表中的所有重复值,并将总数添加到列表或字典中。 通缉结果:学生ID +总天数
所以例如:(291,5)(301,5)(291,5)应该给(291,2)(301,5)
private List<Tuple<int, int>> ExcercisesWithTime = new List<Tuple<int, int>>();
public void GetAllTimeWithExercises()
{
GetAllInfo();
GetTimeExercise(AllStudentInfo);
}
private void GetTimeExercise(List<IctLabTable> studentInfo)
{
foreach (var item in studentInfo)
{
ExcercisesWithTime.Add(new Tuple<int, int>(item.StudentId, ConvertDayOfWeek(item.CreatedAt)));
}
}
private int ConvertDayOfWeek(DateTime dateValue)
{
int dayOfWeek = (int) dateValue.DayOfWeek;
return dayOfWeek;
}
我尝试了不同的东西,但没有成功。我尝试通过创建字典来解决它:
private Dictionary<int, Tuple<int, int>> StudentDayTotalExercises = new Dictionary<int, Tuple<int, int>>();
//// Studentid + day (Example: 291 + 5)
private void CountSameDays(List<Tuple<int, int>> xList)
{
foreach (var item in xList)
{
var TotalDays = 1;
if (!StudentDayTotalExercises.ContainsKey(item.Item1))
{
var TupleStudentDays= new Tuple<int, int>(item.Item2, TotalDays );
StudentDayTotalExercises.Add(item.Item1, TupleStudentDays);
}
else
{
Here I wanted to increment the value if the key existed. But without success.
//StudentDayTotalExercises[item.Item1, ]++;
}
}
}
答案 0 :(得分:2)
只需按Tuple
分组并计算出现次数:
List<Tuple<int, int>> excercisesWithTime = new List<Tuple<int, int>>
{
Tuple.Create(291, 5),
Tuple.Create(301, 5),
Tuple.Create(291, 5)
};
// method syntax
var result = excercisesWithTime.GroupBy(key => key, item => 1)
.Select(group => new {
group.Key,
Duplicates = group.Count()
});
//query syntax
var result = from item in excercisesWithTime
group 1 by item into g
select new {
g.Key,
Duplicates = g.Count()
};
我建议您使用属性创建一个合适的类,而不是使用Tuple
。使用更清晰,您无需记住每个ItemX
中放置的内容。
如果您使用的是C#7.0,请参阅其有关元组的功能