Это сгладит список или словарь (или список списков или словарей словарей и т. Д.). Предполагается, что значения являются строками, и создается строка, которая объединяет каждый элемент с аргументом-разделителем. Если вы хотите, вы можете использовать разделитель, чтобы потом разделить результат на объект списка. Он использует рекурсию, если следующим значением является список или строка. Используйте аргумент 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
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;
}
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;
}
int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage);
int pages = 1 + (totalRecords + 1) / (recordsPerPage + 1)