我正在尝试用 C# 制作音乐播放器程序。我目前做的项目是供个人使用,不会公开发布。向你们展示我到目前为止所做的事情是:
这是程序的用户界面,左侧有两个按钮我的音乐和收藏夹(应该是播放次数最多的歌曲)。我需要帮助的是将列表项从最大到最小排序,这意味着所有这些项中播放次数最多的必须在列表中(存储在 txt 文件中的数据,已尝试部分中提供的信息)我不知道如何用列表来做到这一点。忽略右下角的windows media player控件,我用它来播放音乐文件并在程序启动时隐藏。
我有一个包含不同歌曲的列表框控件,每次从列表中单击一个项目时,所选项目都会播放。我目前将每首歌曲的数据保存在一个 .txt 文件中。此外,当单击“收藏夹”按钮时,程序会清除当前列表(它不会打开新表单)并添加文件夹中的数据(如果该歌曲之前从未播放过,则不会生成 .txt 文件,因此它不会添加)。我设法列出了列表中播放次数最多的歌曲。所以我为每首歌曲都有一个 .txt 文件,其中包含歌曲在第一行播放的次数。
除此之外,我尝试制作一个 2D 字符串数组,它有 2 列,歌曲名称在前,播放次数在后。我尝试对数组进行排序,但是当我尝试将数组项添加到列表中时,结果未排序。
//This is my sort class:
string[,] _sortArray;
int[] _tagArray;
int _sortIndex;
protected string[,] SortArray { get { return _sortArray; } }
public ArraySort(string[,] theArray, int sortIndex)
{
_sortArray = theArray;
_tagArray = new int[_sortArray.GetLength(0)];
for (int i = 0; i < _sortArray.GetLength(0); ++i) _tagArray[i] = i;
_sortIndex = sortIndex;
}
public string[,] ToSortedArray()
{
Array.Sort(_tagArray, this);
string[,] result = new string[
_sortArray.GetLength(0), _sortArray.GetLength(1)];
for (int i = 0; i < _sortArray.GetLength(0); i++)
{
for (int j = 0; j < _sortArray.GetLength(1); j++)
{
result[i, j] = _sortArray[_tagArray[i], j];
}
}
return result;
}
public virtual int Compare(int x, int y)
{
if (_sortIndex < 0) return 0;
return CompareStrings(x, y, _sortIndex);
}
protected int CompareStrings(int x, int y, int col)
{
return _sortArray[x, col].CompareTo(_sortArray[y, col]);
}
//Calling the method from the main program and storing the array data to the
//list
ArraySort comparer = new ArraySort(array, 1);
string[,] sortedData = comparer.ToSortedArray();
for (i = 0; i < sortedData.GetLength(0); i++)
{
listSongs.Items.Add(sortedData[i,0]);
}
我希望数组项从最大到最小排序,但情况似乎并非如此,因为列表是随机排序的。
不要使用二维数组。创建一个类来保存数据并创建一个数组:
class SongPlayData {
string SongName;
int PlayCount;
}
// ...
SongPlayData[] playData = // your song data here
然后你可以像这样对数组进行排序:
SongPlayData[] ToSortedArray() {
var sortedData = SongPlayData[playData.length];
Array.Copy(playData, sortedData, 0);
Array.Sort(sortedData, (a, b) => a.PlayCount.CompareTo(b.PlayCount));
return sortedData;
}
这是强制性的 LINQ 版本:
SongPlayData[] ToSortedArray() {
return playData.OrderBy(d => d.PlayCount).ToArray();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句