Я программирую в Ruby.Альтернативное форматирование строк с несколькими строками в каждом наборе
Учитывая, что у меня есть следующий 2D массив:
list = [
["T1", "Cat 1"],
["T2", "Cat 2"],
["T3", "Cat 3"],
["T4", "Cat 4"],
["T5", "Cat 1"],
["T6", "Cat 2"],
["T7", "Cat 3"],
["T8", "Cat 4"],
["T9", "Cat 1"],
["T10", "Cat 2"],
["T11", "Cat 3"],
["T12", "Cat 4"],
]
У меня также есть список категорий:
cat = ["Cat 1", "Cat 2", "Cat 3", "Cat 4"]
cat_count = cat.count
У меня также есть метод bold
, который форматирует текст полужирный, простота здесь. Я собираюсь использовать следующий метод:
def bold(text)
'b_' << text
end
Я бы хотел ke для форматирования каждого набора категорий чередующимся образом. Таким образом, первый набор будет жирным шрифтом, а затем второй набор не, третий набор жирного шрифта, четвертый набор не т.д.
В этом случае я хотел бы получить следующий форматированный вывод: T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12
Я ожидаю, что следующий рубиновый вывод:
["b_T1", "Cat 1"]
["b_T2", "Cat 2"]
["b_T3", "Cat 3"]
["b_T4", "Cat 4"]
["T5", "Cat 1"]
["T6", "Cat 2"]
["T7", "Cat 3"]
["T8", "Cat 4"]
["b_T9", "Cat 1"]
["b_T10", "Cat 2"]
["b_T11", "Cat 3"]
["b_T12", "Cat 4"]
У меня есть следующий код на данный момент, который совсем не выглядит рубистом. Пожалуйста, помогите мне улучшить этот код.
cat_increment = 0
switch = 1
list.map do |l|
cat_increment+=1
entry = switch ? [bold(l.first), l.second] : l
if cat_increment == cat_count
switch = switch ? nil : 1
cat_increment = 0
end
entry
end
Не ясно как задействован массив 'cat'. Исправлен ли цикл в «списке»? Если это так, то важна только длина цикла. Я не понимаю, почему у вас есть этот конкретный массив 'cat'. Или, это там больше с «кошкой»? – sawa
Цикл в списке фиксирован. – Steve
Автомобильный массив дает длину категорий, которые нужно искать, так что мне не нужно делать group_by – Steve