iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

使用google搜尋或瀏覽部落格網站時,都是常會發現有一種設計:在網頁底部會有頁數可讓你瀏覽更多結果或文章。這些網站在渲染結果時,一方面為了改善系統效能,一方面為了使用者體驗,把本來一長串的結果分成好幾頁,讓使用者去瀏覽完這一頁,可以自行選擇到下一頁或者其他頁。

在前幾天Sum Consecutive的例子中,有使用到LINQ的Paging method來簡化。今天就來介紹一些情況可以使用Paging來改寫的情境。

  1. 我們時常會使用來找出第一個 / 最後一個符合條件的物件
private readonly List<Article> _articles = new List<Article>();
        
public Article GetFirstArticle(int userId)
{
    foreach (var article in _articles)
    {
        if (article.User.Id == userId)
        {
            return article;
        }
    }

    return null;
}

⇒ 可以改用 First / Last

private readonly List<Article> _articles = new List<Article>();
        
public Article GetFirstArticle(int userId)
{
    return _articles.First(article => article.User.Id == userId);
}
  1. 分頁設計模式:給定頁數與單頁長度,回傳該頁的內容
public IEnumerable<Article> GetArticles(int page, int pageSize)
{
    var articles = new List<Article>();
    for (var index = 0; index < _articles.Count; index++)
    {
        if (index >= page * pageSize && index < (page + 1) * pageSize)
        {
            articles.Add(_articles[index]);
        }
    }

    return articles;
}

⇒ 使用Skip先去除前幾頁,再用Take取得下一頁

public IEnumerable<Article> GetArticles(int page, int pageSize)
{
    return _articles.Skip(page * pageSize).Take(pageSize);
}

除了First/Last, Take/Skip,其他還有像是TakeWhile/SkipWhile/Single等操作,在某些情況下也是十分地好用。已經聊過LINQ一些比較常用的Projection and Restriction、Aggregate和Paging method,明天就來聊聊也是的一些Set method。


上一篇
Day 13 工廠方法
下一篇
Day 15 兩個集合的比較
系列文
在Kata中尋找Clean Code是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言