C#制作的音乐播放器项目中的热门游戏节(数组排序和阵列传递到列表)

问题描述 投票:0回答:1

我试图在C#中的音乐播放器程序。我目前做的项目是供个人使用并不会在公开发表。告诉你男人我做了什么至今:

UI:enter image description here

这是该程序的用户界面,在左侧有两个按钮我的音乐和收藏夹(这应该是最播放的歌曲)。我需要帮助是从最大列表项进行排序,以最小意味着播放次数最多的个个都有成为第一个列表(存储在一个txt文件的数据,在搞什么名堂提供的信息尝试部分)上的而我不知道该怎么做一个列表。忽略右下方的Windows媒体播放器的控制,我用它来播放音乐文件,并隐藏在程序启动。

我有一个在它有不同的歌曲列表框控件,每一个项目从列表中点击时,所选择的项目播放。我目前保存在一个.txt文件中每首乐曲的数据。另外,当收藏夹按钮被点击程序清除当前列表(它不打开一个新的形式),并从文件夹中添加数据(如果之前它不会产生一个.txt文件,使其与歌曲从来没有打过将不添加)。我设法列出播放次数最多的歌曲列表。所以,我对于具有时代的歌曲在第一线发挥的数量每首歌曲.txt文件。

除此之外,我一直试图使其中有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]);
}

我预计数组项从最大到最小进行排序,但似乎并没有因为名单是随机排序是这样。

c# listbox audio-player
1个回答
1
投票

不要使用二维数组。做一个类来保存数据,并做出一个数组:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.