ListBox按大多数点击的项目排序

时间:2015-02-19 23:53:37

标签: c# algorithm listbox ranking

以防万一有人已经实现了这个或想要玩。这是一个有趣的小问题。

我正在寻找“收藏夹”列表框。根据每个选择(或点击)的次数,实时重新排列项目。

所以,最重要的项目是点击最多的项目。最底部是最少点击的一个。仅仅为了踢,如果几个项目具有相同的排名,则按字母顺序排序。

一帆风顺。

1 个答案:

答案 0 :(得分:0)

以下是"项目的可能实现"这让那些过早的答题者感到困惑。所有大约十六行代码。

struct Entry
{
    public string   text;
    public int      rank;

    public Entry( string text, int rank )
    {
        this.text   = text;
        this.rank   = rank;
    }
}

List<Entry> ls = new List<Entry>();

...

void RankInsert( string text, int rank, int indexPrev )
{
    int insertAt = -1;

    for( int i = 0; i < this.Items.Count; i++ )
    {
        if( rank > ls[ i ].rank
            || ( rank == ls[ i ].rank
                 && string.CompareOrdinal( text, ls[ i ].text ) < 0 ) )
        {
            insertAt = i;
            break;
        }
    }

    if( indexPrev != -1 )
    {
        ls.RemoveAt( indexPrev );
        listbox.Items.RemoveAt( indexPrev );
    }

    insertAt = ( insertAt != -1 ) ? insertAt : ls.Count;

    ls.Insert( insertAt, new Entry( text, rank ) );
    listbox.Items.Insert( insertAt, text );
}

如果这些(错误地)标记为新的,则该方法将允许插入重复项。无论如何,该检查应在其他地方进行。

希望它有帮助......对编码感兴趣的人。而且,是的,我仍然对替代实施感兴趣。随意。