В памяти подкачки справки List <SomeType> - PullRequest
1 голос
/ 24 сентября 2010

У меня есть коллекция List , и я хочу выполнить подкачку в памяти, используя начальный и конечный индексы.

Какой лучший способ сделать это?

Ответы [ 5 ]

17 голосов
/ 24 сентября 2010
list.Skip(pageIndex * pageSize).Take(pageSize);

Предполагается, что индекс страницы основан на 0.Или, если у вас действительно есть конечный индекс:

list.Skip(startIndex).Take(endIndex - startIndex);
5 голосов
/ 24 сентября 2010

Достаточно ли этого примера кода? Ваш вопрос не очень подробный, но именно так вы и сделаете.

// fill this in
int pageSize = 10;

// This figures out the total number of pages for you. The modulo stuff
// takes care of the case when the last page has less than pageSize items.
// It's the same as Math.Ceiling() but using integers.
int numberOfPages = (aList.Count / pageSize)
    + (aList.Count % pageSize == 0 ? 0 : 1);

// 0 based
int currentPage = 0;

IEnumerable<SomeType> itemsOnThisPage = aList.Skip(currentPage * pageSize).Take(pageSize);
2 голосов
/ 24 сентября 2010

Использование Linq удобно, но не эффективно . Я пойду с классикой:

  const int ItemPerPage = 20;
  int pageNo = 5;
  for (int i = pageNo * ItemPerPage; i < (pageNo * (ItemPerPage + 1)); i++)
  {
     Console.WriteLine(items[i]);
  }
0 голосов
/ 24 сентября 2010

Это может удовлетворить ваши потребности.Я пытался сделать так, чтобы он использовал начальный и конечный индекс в соответствии с запросом.Звоните как GetPages (myusers, 10);для 10 элементов на странице.

 public IEnumerable<IEnumerable<T>> GetPages<T>(
         IList<T> source, int pageLength)
    {
        //validation here

        for (int startIndex = 0; 
             startIndex < source.Count;
             startIndex += pageLength)
        {
            yield return Page(source, startIndex, pageLength);
        }
    }

    public  IEnumerable<T> GetPage<T>(
         IList<T> source, int startIndex, int length)
    {
        //validation here

        for (int i = startIndex; 
             i < startIndex + length && i < source.Count; 
             i++)
        {
            yield return source[i];
        }
    }

Затем выполните

 List<IEnumerable<User>> pages = GetPages(myusers, 10).ToList();

, теперь вы можете проиндексировать страницы (на основе 0)

0 голосов
/ 24 сентября 2010

Если вы используете .NET 3.5+, вы можете использовать linq для этого: http://solidcoding.blogspot.com/2007/11/paging-with-linq.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...