Установка альтернативных записей в true, если их четное число еще оставить последнюю запись - PullRequest
1 голос
/ 30 апреля 2019

У меня есть такой список посещаемости.

проблема: Мне нужно установить In и Out поочередно. но если у меня есть только 3 записи, тогда мне нужно установить 0 запись In true. 1 запись out верно. и 3 запись имеет значение In Out ложно. Я пытался, как это работает нормально. но я проверял, есть ли лучший способ с linq.

ObservableCollection<EmployeeAttandance> attendancesPerDay = new ObservableCollection<EmployeeAttandance>();
if (attendancesPerDay.Count % 2 == 0)
{
    int counter = 0;
    foreach (var attendance in attendancesPerDay)
    {
        if (counter % 2 == 0)
            attendance.In = true;
        else
            attendance.Out = true;
        counter++;
    }
}
else
{
    int counter = 0;
    foreach (var attendance in attendancesPerDay)
    {
        if (attendancesPerDay.IndexOf(attendance) == attendancesPerDay.Count - 1)
            continue;
        if (counter % 2 == 0)
            attendance.In = true;
        else
            attendance.Out = true;
        counter++;
    }
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы можете попробовать назначить In и Out для предыдущего (не текущего ) элемента:

  bool isEven = true;
  EmployeeAttandance prior = null;

  foreach (EmployeeAttandance item in attendancesPerDay) {
    if (prior != null) {
      if (isEven)
        prior.Out = true;
      else
        prior.In = true;
    }

    isEven = !isEven;
    prior = item;
  }

  if (isEven && prior != null) // should we assign anything to the last item?
    prior.Out = true;
0 голосов
/ 30 апреля 2019

Вы можете попробовать так:

var isIn = false;
var isOut = false;
int attendanceCount = attendancesPerDay.Count;
var set1 = attendancesPerDay.Take(attendanceCount % 2 == 0 ? attendanceCount : attendanceCount - 1).ToList();
var set2 = attendancesPerDay.Skip(attendanceCount % 2 == 0 ? attendanceCount : attendanceCount - 1).ToList();
set1.ForEach(a => {
    if(!isIn)
    {
        isIn = true;
        a.In = isIn;
        isOut = false;
    }
    else
    {
        isOut = true;
        a.Out = isOut;
        isIn = false;
    }
});

set1.AddRange(set2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...