繁体   English   中英

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

[英]What's the most efficient way to sort this alphabetically?

我有这个类结构:

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);

它是否将其排序到位,还是需要将其分配到另一个列表?

使用linq(方法表示法):

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

此变平的myListmyOtherList的成的平面列表myOtherObject的。

您可以很容易地使用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是不可变的,因此自动排序不会被破坏。

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

虽然这样的答案可能看起来像是避免了解决方案,但如果你要按顺序进行更多的打印而不是添加项目,那么在插入时进行排序的List实现可能只是正确的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM