Well, first of all you can't remove items from an array. The size of an array is determined when it's created, and can never change after that. If you want a smaller array, you have to create a new one.
You can shuffle the items using an extension like this:
public static class IEnumerableExtensions {
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> list, Random rnd) {
List<T> items = new List<T>(list);
for (int i = 0; i < items.Count; i++) {
int pos = rnd.Next(i, items.Count);
yield return items[pos];
items[pos] = items[i];
}
}
}
I'm not exactly sure what you mean by the coefficients, but I guess that you want to get the first 60% in one array, then another 30% in second array, then another 10% in a third array:
IEnumerable<int> shuffled = originalArray.Shuffle(new Random()).ToList();
int cnt60 = (int)Math.Round(originalArray.Length * 0.6);
int cnt30 = (int)Math.Round(originalArray.Length * 0.3);
int cnt10 = (int)Math.Round(originalArray.Length * 0.1);
int[] first60 = shuffled.Take(cnt60).ToArray();
int[] next30 = shuffled.Skip(cnt60).Take(cnt30).ToArray();
int[] next10 = shuffled.Skip(cnt60+cnt30).Take(cnt10).ToArray();