私は疑問に思っていました。私が働いている会社では、大量のデータを管理していますが、データは顧客から事実上提供されているため、必ずしも信頼できるとは限りません。それには正当な理由があります。その多くのタイムスタンプが間違っているか、一部が欠落しているか、またはその他のものがあります。
私が最近やらなければならなかったタスクの 1 つは、基本的に、一連の要素内で null である要素を見つけてから、次の非 null 要素を見つけて、それらの null レコード間の差を平均化することです。つまり、データセット A があるとします。
A = { 0f, 1f, 2f, 5f, Null, Null, Null, 7f, Null, 8f }
0 と Null を区別する必要があることに注意してください。違いは明らかに、0 は 0 であるのに対し、Null はデータがまったくないことです。
LINQ を使用して、基本的に A の次のサブセクションにアクセスできる方法はありますか。
Subsection { Null, Null, Null, 7f }
そして、4 つのレコードにわたって (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 要素を探してから、連続するすべての null を a に格納しList<T>
、次の非 null を見つけた後、上記を反復してすべての変数を割り当てること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()