2014-01-31 24 views
0

我有一個列表如下:如何改變整個列表中的某些範圍值使用LINQ

property = Enumerable.Range(0, 999).Select(i => 0).ToList(); 

所有的值都爲0。我想改變在一些領域內的一些值。例如;

(0,333)=必須是0

(334,666)=必須是1

(667999)=必須是2

有一種方法在LINQ到做到這一點?

在此先感謝。

回答

4
var query = Enumerable.Range(0, 999).Select((n, index) => 
      { 
       if (index <= 333) 
        return 0; 
       else if (index <= 666) 
        return 1; 
       else 
        return 2; 
      }); 
+0

謝謝您的回答。那麼,我能否持續發現有多少指標具有相同的價值?例如查詢[0] =查詢[1] =查詢[2] =查詢[3] = 0,查詢[4] = 1,查詢[5] =查詢[6] = 0.前三個索引有0,所以第一個答案是3.最後兩個索引有0,所以第二個答案是2 ..我怎麼能找到這些? – 1teamsah

+0

@ team16sah這聽起來像是一個很好的問題給我。請注意,stackoverflow.com並不真正熱衷於用戶詢問一段代碼。在提出問題之前,請自己嘗試一下,並在問題中顯示。 –

2

您可以使用此擴展方法:

public static class MyExtensions 
{ 
    public static void SetRangeValues<T>(this IList<T> source, int start, int end, T value) 
    { 
     if (start > 0 && end < source.Count) 
     { 
      for (int i = start; i <= end; i++) 
      { 
       source[i] = value; 
      } 
     } 

    } 
} 

用法:

list.SetRangeValues(0,333,0); 
list.SetRangeValues(334,666,1); 
1

我認爲你可以使用整數除法伎倆。

var property = Enumerable.Range(0, 999).Select(i => i/333).ToList(); 

一個簡單的測試用例:

Enumerable.Range(0, 9).Select(x => x/3).ToList().ForEach(Console.WriteLine); 
+0

'666/333 = 2',在他的例子中'666 == 1'和'667 == 2' –

相關問題