1

を使用してプロパティ値をクラスに割り当てていますForEach statement。出力は次のようになります...

Startingpoint | length
-----------------------
0             | 1
1             | 54.47
55.47         | 47.98 

長さは次のように計算されます...

length = *next item starting point - current item starting point

疑似コード風の外観でやりたいことは次のとおりです。

foreach (DefectMap obj in dm)
{
     mdmList.Add(new ModifiedDefectMap()
        {                        
            StartingPoint = obj.Start,
            Length =  ValueOfNext().obj.Start - obj.Start

問題は、ループ"ValueOfNext().obj.Start"の現在の反復にいるため、何が起こるかを知る方法がないことです。foreach

4

5 に答える 5

4

通常の for ループを使用する

//Count-1 to stop at the second to last item
for(int i = 0; i < dm.Count-1; ++i)
{
      mdmList.Add(new ModifiedDefectMap()
      {                        
           StartingPoint = dm[i].Start,
           Length =  dm[i+1].Start - dm[i].Start
      });
}
于 2013-11-11T19:26:40.890 に答える
3

.Zip()ステートメントを試すことができます。

mdmList = dm.Zip(dm.Skip(1), (current, next) => new ModifiedDefectMap
{
  StartingPoint = current.Start,
  Length = next.Start - current.Start
});

スキップはリストをオフセットするため、隣接する要素のすべてのペアをcurrentおよびnextにマッピングし、それらを使用してオブジェクトを作成します。このようにかなりきれいに見えます。

于 2013-11-11T19:31:08.203 に答える
1

a 内の次の値を確認できるかどうかは特にわかりませんforeachが、そのような実装を行っている場合は、for ループを使用して次の値を提供することをお勧めします。値が配列の境界内にあります。

for(int i = 0; i < list.Length; i++)
{
     list[i] = random.Next();
     if(i+1 < list.Length)
     {
         list[i+1] = random.Next();
     }
}

HashSet や Stack など、一部のコレクションにはインデクサー ([x] 配列表記)​​ が含まれていないため、list にはインデクサー ([x] 配列表記)​​ が必要であることを理解しておいてください。

于 2013-11-11T19:29:53.907 に答える