С помощью tidyverse
вы можете сделать:
PAIRS %>%
rowid_to_column() %>%
gather(var, val, -rowid) %>%
left_join(LISTN, by = c("val" = "Names")) %>%
select(-val) %>%
spread(var, Id) %>%
select(-rowid)
Name1 Name2
1 1 2
2 3 4
Он преобразует df PAIRS из широкоформатного формата в длинный, объединяет его с LISTN df по именам и затем преобразовывает его обратно в широкоформатный формат со значениями из "Id".
Если у вас есть серия таблиц, вы можете сделать небольшую функцию.
<#function zebra index>
<#if (index % 2) == 0>
<#return "white" />
<#else>
<#return "#efefef" />
</#if>
</#function>
<#assign arr=["a","b","c","d"] />
<table>
<#list arr as n>
<tr><td bgcolor=${zebra(n_index)}>${n}</td></tr>
</#list>
</table>
и встроенная функция _index при использовании списка избавляет вас от необходимости самостоятельно создавать и увеличивать индексную переменную.
Хм... Хорошо, это является лучшим, я придумал:
<#assign row=0>
<#list items as item>
<tr style='background-color: <#if (row % 2) == 0>green<#else>red</#if>'><td>${item}</td></tr>
<#assign row = row + 1>
</#list>
От оглушительной тишины я вывожу нет никакого более хорошего способа сделать это.
Используя FreeMarker, существуют ограниченные способы ответить на этот вопрос, но если Вы желаете использовать один только CSS (Который все еще позволяет разделение проблем), затем вот один путь:
Поместите следующее в свою таблицу стилей:
tr.linea {
background-color: #CC9999; color: black;
}
tr.lineb {
background-color: #9999CC; color: black;
}
Затем используйте следующее tr
класс для определения альтернативных строк:
<table>
<tr class="linea"><td>One Fish</td></tr>
<tr class="lineb"><td>Two Fish</td></tr>
<tr class="linea"><td>Red Fish</td></tr>
<tr class="lineb"><td>Blue Fish</td></tr>
</table>
Существует много ресурсов для выбора из также.
Править: Если Ваш HTML входит в электронное письмо, то Вы не можете быть уверены, что почтовый клиент клиента позволит любой HTML, который Вы пытаетесь поместить в него. Ваш лучший выбор в той точке состоит в том, чтобы использовать FreeMarker, подобный тому, как у Вас есть он, за исключением того, что необходимо удалить style
тег и использование окрашивают для каждого использования строки bgcolor="color"
в Вашем <tr>
теги.
Решение сводится к следующему:
<style>
.rowon {
background-color:#dedede;
}
.rowoff{
}
</style>
В вашем шаблоне:
<#list items as item>
<tr class="<#if item_index % 2 ==0>rowon<#else>rowoff</#if>"><td>${item}</td></tr>
</#list>
Однако, как указано в предыдущем ответе, вы можете сделать это с помощью CSS без этого решения freemarker (см. http://www.w3.org/Style/Examples/007/evenodd ):
<style>
.striped tr:nth-child(odd) {background: #eee}
.striped tr:nth-child(even) {background: #fefefe}
</style>
А затем просто используйте обычную таблицу без классов в строках:
<table class="striped">
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
</table>
ИЛИ с таблицей, созданной freemarker:
<table class="striped">
<#list items as item>
<tr><td>${item}</td></tr>
</#list>
</table>
Так что все это в CSS.
С freemarker вы можете использовать string
встроенный:
<#list items as item>
<tr style='background-color: ${((item_index % 2)==0)?string("green", "blue")}'><td>${item}</td></tr>
</#list>