簡體   English   中英

如何按字母順序對我的姓名列表進行排序?

[英]How can i sort my list of names alphabetically?

我想知道,如何按字母順序對列表中的名稱和確定名稱進行排序。

我不確定,但我用谷歌搜索,我猜它只是按名稱排序。

    public void FilterParticipants(List<string> players, PlayerContainer allPlayers)
    {
        for (int i = 0; i < allPlayers.Count; i++)
        {
            if (!players.Contains(allPlayers.FindName(i) + " " + allPlayers.FindSurname(i)))
            {
                players.Add(allPlayers.FindName(i) + " " + allPlayers.FindSurname(i));
            }
        }
        players.Sort();
    }

如果您想按姓氏然后按姓名對玩家姓名進行排序,並且無法更改設計以傳入List<Player> ,那么這里有一個解決方案。

請注意,設計略有變化,因為返回新列表通常比修改輸入列表更好。 此外,方法名稱有點誤導。 “過濾器”意味着您正在根據某些條件減少項目集,但在這種情況下,我們將添加不存在的項目,因此我將其重命名為GetCombinedParticipants

鑒於此,這是您可以實現它的一種方法。 請注意,此設計使用Substring來查找姓名中的最后一個空格,該空格用作名字和姓氏之間的分隔符(因此假設姓氏中沒有空格)。 如果有,那么我不知道您如何從List<string>識別它們,這是創建具有單獨FirstNameSurname屬性的Player類的另一個很好的理由...

public List<string> GetCombinedParticipants(List<string> players, 
    PlayerContainer allPlayers)
{
    // Make a copy of the input list
    var results = players.ToList();

    for (int i = 0; i < allPlayers.Count; i++)
    {
        var fullName = $"{allPlayers.FindName(i)} {allPlayers.FindSurname(i)}";

        if (!results.Contains(fullName)) results.Add(fullName);
    }

    // Order by last name, then by first name
    return results
        .OrderBy(name => name.Substring(name.LastIndexOf(" ") + 1)) 
        .ThenBy(name => name.Substring(0, name.LastIndexOf(" ")))
        .ToList();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM