Лучше всего использовать List
вместо SortedList
, но есть способ сделать это с SortedList
. Используйте IComparer
, который не будет выполнять какую-либо фактическую сортировку, чтобы составить ваш перемешанный список. Это IComparer
будет добавлять каждое новое дополнение в начало или конец списка. Я не уверен, что, поскольку я не знаю базовую реализацию сортировки SortedList
, но это не имеет значения, так как в любом случае это приемлемо.
public class SuffleSorter : IComparer
{
int IComparer.Compare( Object x, Object y ) {
return -1;
}
}
private SortedList Shuffle(SortedList oldSongList)
{
SortedList newSongList = new SortedList(new ShuffleSorter());
Random r = new Random();
oldSongList.TrimToSize();
for (int n = oldSongList.Count; n > 0; n--)
{
int rand = r.Next(n);
newSongList.Add(oldSongList.GetKey(rand), oldSongList.GetByIndex(rand));
oldSongList.RemoveAt(rand);
oldSongList.TrimToSize();
}
return newSongList;
}
Обратите внимание, что для этого потребуется создать новый, отсортированный по закону список воспроизведения, когда пользователь отключает режим воспроизведения в случайном порядке (при условии, что ваш режим воспроизведения в случайном порядке - это режим переключения, а не кнопка "перемешать список воспроизведения" одним нажатием).