Вот работающая и эффективная функция массива Shisherle Fisher-Yates:
private static void shuffleArray(int[] array)
{
int index;
Random random = new Random();
for (int i = array.length - 1; i > 0; i--)
{
index = random.nextInt(i + 1);
if (index != i)
{
array[index] ^= array[i];
array[i] ^= array[index];
array[index] ^= array[i];
}
}
}
или
private static void shuffleArray(int[] array)
{
int index, temp;
Random random = new Random();
for (int i = array.length - 1; i > 0; i--)
{
index = random.nextInt(i + 1);
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
Существует две опции, явный делегат или делегат, замаскированный как конструкция lamba:
явный делегат
myObjects.RemoveAll(delegate (MyObject m) { return m.X >= 10; });
лямбда
myObjects.RemoveAll(m => m.X >= 10);
<час> Дополнение:
Производительность, мудрая, оба равны. На самом деле, обе конструкции языка генерируют тот же IL, когда скомпилировано. Это вызвано тем, что C# 3.0 является в основном расширением на C# 2.0, таким образом, это компилирует в конструкции C# 2.0:)
//C# 2.0
RemoveAll(delegate(Foo o){ return o.X >= 10; });
или
//C# 3.0
RemoveAll(o => o.X >= 10);
или
Predicate<Foo> matches = delegate(Foo o){ return o.X >= 10; });
//or Predicate<Foo> matches = o => o.X >= 10;
RemoveAll(matches);
Лямбда путь C# 3.0:
myObjects.RemoveAll(m => m.x >= 10);
анонимный делегат путь C# 2.0:
myObjects.RemoveAll(delegate (MyObject m) {
return m.x >= 10;
});
И, для парней VB, лямбда путь VB 9.0:
myObjects.RemoveAll(Function(m) m.x >= 10)
, К сожалению, VB не поддерживает анонимного делегата.