Определите # страниц от значений Общего количества и PerPage

Это сгладит список или словарь (или список списков или словарей словарей и т. Д.). Предполагается, что значения являются строками, и создается строка, которая объединяет каждый элемент с аргументом-разделителем. Если вы хотите, вы можете использовать разделитель, чтобы потом разделить результат на объект списка. Он использует рекурсию, если следующим значением является список или строка. Используйте аргумент key, чтобы указать, хотите ли вы получить ключи или значения (установите для ключа значение false) из объекта словаря.

def flatten_obj(n_obj, key=True, my_sep=''):
    my_string = ''
    if type(n_obj) == list:
        for val in n_obj:
            my_sep_setter = my_sep if my_string != '' else ''
            if type(val) == list or type(val) == dict:
                my_string += my_sep_setter + flatten_obj(val, key, my_sep)
            else:
                my_string += my_sep_setter + val
    elif type(n_obj) == dict:
        for k, v in n_obj.items():
            my_sep_setter = my_sep if my_string != '' else ''
            d_val = k if key else v
            if type(v) == list or type(v) == dict:
                my_string += my_sep_setter + flatten_obj(v, key, my_sep)
            else:
                my_string += my_sep_setter + d_val
    elif type(n_obj) == str:
        my_sep_setter = my_sep if my_string != '' else ''
        my_string += my_sep_setter + n_obj
        return my_string
    return my_string

print(flatten_obj(['just', 'a', ['test', 'to', 'try'], 'right', 'now', ['or', 'later', 'today'],
                [{'dictionary_test': 'test'}, {'dictionary_test_two': 'later_today'}, 'my power is 9000']], my_sep=', ')

дает:

just, a, test, to, try, right, now, or, later, today, dictionary_test, dictionary_test_two, my power is 9000
8
задан 6 July 2009 в 19:42
поделиться

4 ответа

int pages = ((totalRecords-1) / recordsPerPage)+1

Предполагая, что totalRecords и recordsPerPage являются целыми числами. Если они двойные (почему они двойные?), Вам нужно сначала преобразовать их в целые или длинные, потому что это зависит от целочисленного деления.

Оберните его в функцию, чтобы вам не приходилось повторите расчет везде в своей кодовой базе. Просто настройте его один раз в такой функции:

public int countPages(int totalRecords, int recordsPerPage) {
  return ((totalRecords-1) / recordsPerPage)+1;
}

Если totalRecords может быть нулевым, вы можете просто добавить специальный случай для него в функцию:

public int countPages(int totalRecords, int recordsPerPage) {
  if (totalRecords == 0) { return 1; }
  return ((totalRecords-1) / recordsPerPage)+1;
}
21
ответ дан 5 December 2019 в 08:25
поделиться

Problem with this approach:

public int countPages(int totalRecords, int recordsPerPage) {  
    if (totalRecords == 0) { return 1; }  return ((totalRecords-1) / recordsPerPage)+1;
}

if totalRecords is 1 results in divide by 0. Need an extra if statement.

Here is my rewrite. .NET tends to use -1 when no result is possible on an int return. So reuse this convention.

public int countPages(int totalRecords, int recordsPerPage)
{ 

//insert as many paranthesies and tabs as makes you happy.
if(totalRecords == 0) return -1;
return (totalRecords % recordsPerPage) == 0? 
(totalRecords/recordsPerPage) 
: (totalRecords/recordsPerPage) + 1; 

}
0
ответ дан 5 December 2019 в 08:25
поделиться
int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage);
-1
ответ дан 5 December 2019 в 08:25
поделиться
int pages = 1 + (totalRecords + 1) / (recordsPerPage + 1)
0
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: