按字母顺序排序最有效的方法是什么?

本文关键字:方法 是什么 有效 顺序 排序 | 更新日期: 2023-09-27 18:14:43

我有这样的类结构:

List<myObject> myList = new List<myObject>();
myObject
{
    List<myOtherObject> myOtherList = new List<myOtherObject>();
}
myOtherObject
{
    string name;
}

按字母顺序打印myList中所有names的最佳方法是什么?

我可以这样做,但我怀疑有一种更有效的方法可以达到同样的效果:

foreach(myObject a in myList)
{
    foreach(myOtherObject b in a.myOtherList)
    {
         newList.Add(b.name);
    }
}
//print newList alphabetically
编辑:

我能够改变结构,现在我只需要在name属性的基础上对myOtherList进行排序。

我试着这样做,但它似乎不排序:

myOtherList.OrderBy(obj=>obj.name);

它是按顺序排序,还是我需要将它分配给另一个列表?

按字母顺序排序最有效的方法是什么?

using linq (method notation):

foreach (var result in myList
    .SelectMany(l => l.myOtherList)
    .OrderBy(obj => obj.Name))
{
    Console.WriteLine(result.name);
}

这将myOtherList 's中的myList平展为myOtherObject 's的平展列表。

按字母顺序打印列表中所有名称的最有效方法是从按字母顺序排序的列表开始。然后按顺序打印它们。

虽然这样的答案看起来像是在回避解决方案,但是如果您要按顺序执行更多的打印操作,而不是添加项,那么根据插入进行排序的List实现可能就是正确的答案。

任何其他解决方案都需要先对列表进行排序,或者生成列表的排序版本,除非您想对整个列表进行一些非常糟糕的性能扫描,以确定要打印的"下一个最低"项。

使用LINQ很容易做到这一点:

var sortedResults = from other in myList
                    from item in other.myOtherList
                    orderby item.name
                    select item;
foreach (var result in sortedResults)
{
    Console.WriteLine(result.name);
}

如果你需要你的数据总是排序,那么你可能想把List<myOtherObject>改为SortedList<string, myOtherObject>,但我假设myOtherObject是不可变的,所以自动排序不会被破坏。