У меня есть список, содержащий диапазоны дат, назовем его «shiftRange», как показано ниже:
start to end
9:00am to 10:00 am
10:00am to 11:am
11:00am to 12:00 pm
У меня есть еще один список, который содержит входы и выходы сотрудников, назовем его applyRecords, который может перекрываться:
signIn to signOut
E1: 9:10am to 9:30am
E2: 9:20am to 10:10am
E3: 10:10am to 11:00am
Теперь я использую ApplyRecords, чтобы разбить ShiftRange на такие фрагменты:
start to end
9:00am to 9:10am
9:10am to 9:20am E1
9:20am to 9:30am E1, E2
9:30am to 10:00am E2
10:00am to 10:10am E2
10:10am to 11:00am E3
11:00am to 12:pm
Это мой код для достижения этой цели, наиболее оптимизированный, который я мог получить, но проблема в том, что у меня миллионы строк в ShiftRange, и текущее время выполнения неприемлемо, есть ли способ дальнейшей оптимизации:
protected override IEnumerable Join(Query query, IEnumerable shiftRange, IEnumerable applyRecords)
{
var state = this.GetState(query);
var applyRecordsCached = applyRecords.ToArray();
foreach (var split in splitRecords)
{
var activeList = new LinkedList();
activeList.AddLast(split);
foreach (var apply in applyRecordsCached)
{
foreach (var current in activeList.ToList())
{
// Apply split logic and replace nodes in-place
activeList.Remove(current);
var parts = current.Split(apply); //the Split function returns before, during and after for the event
if (parts.Item1 != null) activeList.AddLast(parts.Item1);
if (parts.Item2 != null) activeList.AddLast(this.ApplyRecord(apply, parts.Item2, state)); //the ApplyRecord function attaches the apply record to shift range
if (parts.Item3 != null) activeList.AddLast(parts.Item3);
}
}
// Emit all remaining parts in order
foreach (var remainingSplit in activeList)
{
yield return remainingSplit;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-on-time
Оптимизация кода для присоединения одного списка к другому по времени ⇐ C#
Место общения программистов C#
1734548560
Anonymous
У меня есть список, содержащий диапазоны дат, назовем его «shiftRange», как показано ниже:
start to end
9:00am to 10:00 am
10:00am to 11:am
11:00am to 12:00 pm
У меня есть еще один список, который содержит входы и выходы сотрудников, назовем его applyRecords, который может перекрываться:
signIn to signOut
E1: 9:10am to 9:30am
E2: 9:20am to 10:10am
E3: 10:10am to 11:00am
Теперь я использую ApplyRecords, чтобы разбить ShiftRange на такие фрагменты:
start to end
9:00am to 9:10am
9:10am to 9:20am E1
9:20am to 9:30am E1, E2
9:30am to 10:00am E2
10:00am to 10:10am E2
10:10am to 11:00am E3
11:00am to 12:pm
Это мой код для достижения этой цели, наиболее оптимизированный, который я мог получить, но проблема в том, что у меня миллионы строк в ShiftRange, и текущее время выполнения неприемлемо, есть ли способ дальнейшей оптимизации:
protected override IEnumerable Join(Query query, IEnumerable shiftRange, IEnumerable applyRecords)
{
var state = this.GetState(query);
var applyRecordsCached = applyRecords.ToArray();
foreach (var split in splitRecords)
{
var activeList = new LinkedList();
activeList.AddLast(split);
foreach (var apply in applyRecordsCached)
{
foreach (var current in activeList.ToList())
{
// Apply split logic and replace nodes in-place
activeList.Remove(current);
var parts = current.Split(apply); //the Split function returns before, during and after for the event
if (parts.Item1 != null) activeList.AddLast(parts.Item1);
if (parts.Item2 != null) activeList.AddLast(this.ApplyRecord(apply, parts.Item2, state)); //the ApplyRecord function attaches the apply record to shift range
if (parts.Item3 != null) activeList.AddLast(parts.Item3);
}
}
// Emit all remaining parts in order
foreach (var remainingSplit in activeList)
{
yield return remainingSplit;
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79292219/code-optimization-for-attaching-a-list-to-another-based-on-time[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия