gpt4 book ai didi

c# - 在 List 上使用 Take(...) 时,是否会在应用 Take(...) 之前返回整个列表?

转载 作者:太空狗 更新时间:2023-10-30 00:30:45 27 4
gpt4 key购买 nike

我有一个 List 类型的元素

    public class FriendList 
{
public List<string> friends { get; set; } // List of friends names
public DateTime timestamp { get; set; } // date/time on the data file
}

我需要一个程序来获取按 timestamp 排序的前 2 个(然后用它们做一些其他事情)。所以我开始写的是

    public void CompareLastTwo ( )
{
if ( this._fhist.Count < 2 )
{
Console.WriteLine("Need at least two instances of Facebook profile data in the Data folder");
}

FriendList latest, secondLatest;
if ( this._fhist[0].timestamp > this._fhist[1].timestamp )
{
latest = this._fhist[0];
secondLatest = this._fhist[1];
}
else
{
latest = this._fhist[1];
secondLatest = this._fhist[0];
}

for ( int i = 2, n = this._fhist.Count; i < n; ++i )
{
if ( this._fhist[i].timestamp > latest.timestamp )
{
secondLatest = latest;
latest = this._fhist[i];
}
else if ( this._fhist[i].timestamp > secondLatest.timestamp && this._fhist[i].timestamp <= latest.timestamp )
{
secondLatest = this._fhist[i];
}
}

// ...

}

但后来我通过查看 How to get first N elements of a list in C#? 意识到我能做到

List<FriendList> latestTwoFriendLists = this._fhist.OrderBy(L => L.timestamp).Take(2);

哪个更紧凑,但效率高吗????还是计算等式右边的过程在第一个 2 之前得到一个完整的有序列表?

最佳答案

OrderBy 将在 Take 请求第一项时对整个集合进行排序。

所以整个 LINQ 查询将是 O(n*log(n)),而不是像您现有代码那样的 O(n)

关于c# - 在 List<T> 上使用 Take(...) 时,是否会在应用 Take(...) 之前返回整个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com