2011-04-08 30 views
0

我有一個對象集合。我需要循環訪問並生成另一個集合。第二個集合中的每個項目都是第一個集合中兩個項目的函數。所以要簡化這個問題。比較循環內的項目的最佳方法

讓我們假設集合是一組int。

List<int> myIntCollection = new List<int>() {1, 4, 6, 8, 7}; 

我需要產生第二集合,其中每個項目是第一集合中的項的2的總和。所以第二個集合將在轉換後具有這些元素。

List<int> generatedCollection = new List<int>() {5, 10, 14, 15}; 

,你可以看到的第一個元素爲5(這是頂部集合中的前兩個項目的總和),第二elemtn是10,這是在第二和第三項的HTE總和第一集合等等。 。

回答

6

您可以使用for循環:

List<int> result = new List<int>(source.Count - 1); 

for (int i = 0; i < source.Count - 1; i++) 
    result.Add(source[i] + source[i + 1]); 

這並不難!

+1

不會拋出異常的的最後一個? – Pete 2011-04-08 22:22:01

+0

@pete否,因爲他正在計數 - 1支票。 – sarvesh 2011-04-08 22:25:53

+0

對不起,如果我是密集的,但不是數量 - 1已經需要?列表索引不是基於零的? – Pete 2011-04-08 22:26:57

0
int i = 0; 
generatedCollection.AddRange(
      myIntCollection.Where(j => i < myIntCollection.Count - 1).Select(
       j => myIntCollection[i] + myIntCollection[i++ + 1])); 
0

可以使用Enumerable.Range方法來動態創建一個集合,並獲得兩項之和爲每個索引:

List<int> generatedCollection = 
    Enumerable.Range(0, myIntCollection.Length - 1) 
    .Select(i => myIntCollection[i] + myIntCollection[i + 1]) 
    .ToList(); 
相關問題