C# 4.0. Come si può fare con le espressioni lambda?Selezionare ogni secondo elemento dall'array utilizzando lambda
int[] a = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
// Now fetch every second element so that we get { 0, 2, 4, 6 }
C# 4.0. Come si può fare con le espressioni lambda?Selezionare ogni secondo elemento dall'array utilizzando lambda
int[] a = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
// Now fetch every second element so that we get { 0, 2, 4, 6 }
int[] list = a.Where((value, index) => index % 2 == 0)
.ToArray();
Sarà selezionare solo gli indici anche, come calcolare dall'operatore %
(mod).
5 % 2 // returns 1
4 % 2 // returns 0
Secondo MSDN:
operatoreIl resto è tuo amico.
int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();
L'operatore% calcola il resto dopo dividendo il suo primo operando dal suo secondo. Tutti i tipi numerici hanno operatori di resto predefiniti.
+1 per il collegamento E.Lippert. – Askolein
Un altro approccio usando Enumerable.Range
var result = Enumerable.Range(0, a.Length/2)
.Select(i => a[2*i])
.ToArray();
Oppure utilizzare bit per più efficiente per verificare anche:
var result = a.Where((i, index) => (index & 1) == 0)
.ToArray();
+1 per test a bit per bit/pari che è di gran lunga più efficiente dell'operatore '%'. Così elegante :-) – Askolein
http://stackoverflow.com/questions/2229107/che-è-il-fastest-way-to-find-if-a-number-is-even-or-odd –
+1, ho dimenticato, che ' dove' ha anche sovraccarico con indice :) –