Возможно ли сократить этот код?
InlineKeyboardMarkup может иметь как параметр IEnumerable<IEnumerable<>> , но как я знаю это НЕ то же самое что и обычный двумерный массив InlineKeyBoardButton[,]. Попытка привести всё к одномерному массиву заканчивается печально : телеграмм из 30 кнопок выводит только 8 потому как только они помещаются в один ряд . То что я "захардкодил" работает, но выглядит очень криво и думаю это можно упростить , правда?
private static InlineKeyboardMarkup GetButtons(int count)
{
InlineKeyboardMarkup markup;
switch (count)
{
case 28:
markup = new InlineKeyboardMarkup(new[]
{
new[]{InlineKeyboardButton.WithCallbackData("1","day_1"),InlineKeyboardButton.WithCallbackData("2","day_2"),InlineKeyboardButton.WithCallbackData("3","day_3"),InlineKeyboardButton.WithCallbackData("4","day_4"), InlineKeyboardButton.WithCallbackData("5","day_5")},
new[]{InlineKeyboardButton.WithCallbackData("6","day_6"), InlineKeyboardButton.WithCallbackData("7", "day_7"), InlineKeyboardButton.WithCallbackData("8", "day_8"), InlineKeyboardButton.WithCallbackData("9", "day_9"), InlineKeyboardButton.WithCallbackData("10", "day_10")},
new[]{ InlineKeyboardButton.WithCallbackData("11", "day_11"), InlineKeyboardButton.WithCallbackData("12", "day_12"), InlineKeyboardButton.WithCallbackData("13", "day_13"), InlineKeyboardButton.WithCallbackData("14", "day_14"), InlineKeyboardButton.WithCallbackData("15", "day_15")},
new[]{ InlineKeyboardButton.WithCallbackData("16", "day_16"), InlineKeyboardButton.WithCallbackData("17", "day_17"), InlineKeyboardButton.WithCallbackData("18", "day_18"), InlineKeyboardButton.WithCallbackData("19", "day_19"), InlineKeyboardButton.WithCallbackData("20", "day_20")},
new[]{ InlineKeyboardButton.WithCallbackData("21", "day_21"), InlineKeyboardButton.WithCallbackData("22", "day_22"), InlineKeyboardButton.WithCallbackData("23", "day_23"), InlineKeyboardButton.WithCallbackData("24", "day_24"), InlineKeyboardButton.WithCallbackData("25", "day_25")},
new[]{ InlineKeyboardButton.WithCallbackData("26", "day_26"), InlineKeyboardButton.WithCallbackData("27", "day_27"), InlineKeyboardButton.WithCallbackData("28", "day_28") }
});
break;
case 29:
markup = new InlineKeyboardMarkup(new[]
{
new[]{InlineKeyboardButton.WithCallbackData("1","day_1"),InlineKeyboardButton.WithCallbackData("2","day_2"),InlineKeyboardButton.WithCallbackData("3","day_3"),InlineKeyboardButton.WithCallbackData("4","day_4"), InlineKeyboardButton.WithCallbackData("5","day_5")},
new[]{InlineKeyboardButton.WithCallbackData("6","day_6"), InlineKeyboardButton.WithCallbackData("7", "day_7"), InlineKeyboardButton.WithCallbackData("8", "day_8"), InlineKeyboardButton.WithCallbackData("9", "day_9"), InlineKeyboardButton.WithCallbackData("10", "day_10")},
new[]{ InlineKeyboardButton.WithCallbackData("11", "day_11"), InlineKeyboardButton.WithCallbackData("12", "day_12"), InlineKeyboardButton.WithCallbackData("13", "day_13"), InlineKeyboardButton.WithCallbackData("14", "day_14"), InlineKeyboardButton.WithCallbackData("15", "day_15")},
new[]{ InlineKeyboardButton.WithCallbackData("16", "day_16"), InlineKeyboardButton.WithCallbackData("17", "day_17"), InlineKeyboardButton.WithCallbackData("18", "day_18"), InlineKeyboardButton.WithCallbackData("19", "day_19"), InlineKeyboardButton.WithCallbackData("20", "day_20")},
new[]{ InlineKeyboardButton.WithCallbackData("21", "day_21"), InlineKeyboardButton.WithCallbackData("22", "day_22"), InlineKeyboardButton.WithCallbackData("23", "day_23"), InlineKeyboardButton.WithCallbackData("24", "day_24"), InlineKeyboardButton.WithCallbackData("25", "day_25")},
new[]{ InlineKeyboardButton.WithCallbackData("26", "day_26"), InlineKeyboardButton.WithCallbackData("27", "day_27"), InlineKeyboardButton.WithCallbackData("28", "day_28"), InlineKeyboardButton.WithCallbackData("29", "day_29") }
});
break;
case 30:
markup = new InlineKeyboardMarkup(new[]
{
new[]{InlineKeyboardButton.WithCallbackData("1","day_1"),InlineKeyboardButton.WithCallbackData("2","day_2"),InlineKeyboardButton.WithCallbackData("3","day_3"),InlineKeyboardButton.WithCallbackData("4","day_4"), InlineKeyboardButton.WithCallbackData("5","day_5")},
new[]{InlineKeyboardButton.WithCallbackData("6","day_6"), InlineKeyboardButton.WithCallbackData("7", "day_7"), InlineKeyboardButton.WithCallbackData("8", "day_8"), InlineKeyboardButton.WithCallbackData("9", "day_9"), InlineKeyboardButton.WithCallbackData("10", "day_10")},
new[]{ InlineKeyboardButton.WithCallbackData("11", "day_11"), InlineKeyboardButton.WithCallbackData("12", "day_12"), InlineKeyboardButton.WithCallbackData("13", "day_13"), InlineKeyboardButton.WithCallbackData("14", "day_14"), InlineKeyboardButton.WithCallbackData("15", "day_15")},
new[]{ InlineKeyboardButton.WithCallbackData("16", "day_16"), InlineKeyboardButton.WithCallbackData("17", "day_17"), InlineKeyboardButton.WithCallbackData("18", "day_18"), InlineKeyboardButton.WithCallbackData("19", "day_19"), InlineKeyboardButton.WithCallbackData("20", "day_20")},
new[]{ InlineKeyboardButton.WithCallbackData("21", "day_21"), InlineKeyboardButton.WithCallbackData("22", "day_22"), InlineKeyboardButton.WithCallbackData("23", "day_23"), InlineKeyboardButton.WithCallbackData("24", "day_24"), InlineKeyboardButton.WithCallbackData("25", "day_25")},
new[]{ InlineKeyboardButton.WithCallbackData("26", "day_26"), InlineKeyboardButton.WithCallbackData("27", "day_27"), InlineKeyboardButton.WithCallbackData("28", "day_28"), InlineKeyboardButton.WithCallbackData("29", "day_29"), InlineKeyboardButton.WithCallbackData("30", "day_30") }
});
break;
case 31:
markup = new InlineKeyboardMarkup(new[]
{
new[]{InlineKeyboardButton.WithCallbackData("1","day_1"),InlineKeyboardButton.WithCallbackData("2","day_2"),InlineKeyboardButton.WithCallbackData("3","day_3"),InlineKeyboardButton.WithCallbackData("4","day_4"), InlineKeyboardButton.WithCallbackData("5","day_5")},
new[]{InlineKeyboardButton.WithCallbackData("6","day_6"), InlineKeyboardButton.WithCallbackData("7", "day_7"), InlineKeyboardButton.WithCallbackData("8", "day_8"), InlineKeyboardButton.WithCallbackData("9", "day_9"), InlineKeyboardButton.WithCallbackData("10", "day_10")},
new[]{ InlineKeyboardButton.WithCallbackData("11", "day_11"), InlineKeyboardButton.WithCallbackData("12", "day_12"), InlineKeyboardButton.WithCallbackData("13", "day_13"), InlineKeyboardButton.WithCallbackData("14", "day_14"), InlineKeyboardButton.WithCallbackData("15", "day_15")},
new[]{ InlineKeyboardButton.WithCallbackData("16", "day_16"), InlineKeyboardButton.WithCallbackData("17", "day_17"), InlineKeyboardButton.WithCallbackData("18", "day_18"), InlineKeyboardButton.WithCallbackData("19", "day_19"), InlineKeyboardButton.WithCallbackData("20", "day_20")},
new[]{ InlineKeyboardButton.WithCallbackData("21", "day_21"), InlineKeyboardButton.WithCallbackData("22", "day_22"), InlineKeyboardButton.WithCallbackData("23", "day_23"), InlineKeyboardButton.WithCallbackData("24", "day_24"), InlineKeyboardButton.WithCallbackData("25", "day_25")},
new[]{ InlineKeyboardButton.WithCallbackData("26", "day_26"), InlineKeyboardButton.WithCallbackData("27", "day_27"), InlineKeyboardButton.WithCallbackData("28", "day_28"), InlineKeyboardButton.WithCallbackData("29", "day_29"), InlineKeyboardButton.WithCallbackData("30", "day_30")},
new[]{ InlineKeyboardButton.WithCallbackData("31", "day_31") }
});
break;
default:
markup = null;
break;
}
return markup;
}
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
var markup = new InlineKeyboardMarkup(Enumerable.Range(1, count).Select(x => InlineKeyboardButton.WithCallbackData(x.ToString(), "day_" + x)).ToArray());
Вложенными массивами по 5 штук:
var markup = new InlineKeyboardMarkup
(
Enumerable.Range(0, (count + 4) / 5)
.Select(x => x * 5)
.Select
(
x => Range(x + 1, Math.Min(5, count - x))
.Select(x => InlineKeyboardButton.WithCallbackData(x.ToString(), "day_" + x))
.ToArray()
)
.ToArray()
);