Мне было интересно; в компании, в которой я работаю, мы управляем большим количеством данных, но поскольку это эффективно дается нам клиентами, мы не обязательно доверяем ей - с полным основанием. У многих из них неправильная метка времени, или некоторые из них отсутствуют, или что-то еще у вас.Можно ли группировать элементы LINQ на основе последовательности?
Одной из задач, которые я должен был сделать недавно, является поиск элементов, которые являются нулями в наборе элементов, а затем найдите следующий непустой элемент, а затем усредняют разницу между этими нулевыми записями. То есть, скажем, у нас есть набор данных A:
A = { 0f, 1f, 2f, 5f, Null, Null, Null, 7f, Null, 8f }
Важно отметить, что мы должны различать между 0 и Null. Разница, очевидно, в том, что 0 равно 0, а Null вообще не является данными.
Использование LINQ, есть способ, которым мы можем в принципе получить доступ к следующему подразделу A:
Subsection { Null, Null, Null, 7f }
И иметь его в коллекции таким образом, что мы можем превратить его в (7/4f) в течение четыре запись ..
Subsection { 1.75f, 1.75f, 1.75f, 1.75f }
Такое, что, когда снова итерация A
, мы получаем следующий результат:
{ 0f, 1f, 2f, 5f, 1.75f, 1.75f, 1.75f, 1.75f, 4f, 4f }
В настоящее время я делаю это с использованием числового значения, ищущего нулевой элемент, затем сохраняя все последовательные значения NULL в List<T>
и после нахождения следующего ненулевого значения, назначая все переменные, итерируя по указанному List<T>
. Он выполняет эту работу, но выглядит довольно неприятно.
Итак, ради нарциссима, есть ли способ сделать это аккуратно (= меньше беспорядка кода)?
Псевдо
a = { 0, 1, 2, 5, null, null, null, 7, null, 0 }
nullList = new List()
for i = 0, a.length
if i == null
nullList.add(i)
else
if nullList.length > 0
nullList.add(i)
int avg = nullList.Aggregate(x => x)
foreach element in nullList
element = avg
nullList.clear()
Можете ли вы опубликовать часть своего фактического кода? – JMK
Будет ли такое же правило применяться к 'Null, 8f' i.e.' 4f, 4f'? – James
@James - да, я исправил его –