我想在同一个列表的两个元素之间添加多个元素。以下是代码段。
List<string> s = {'A','B','B','C','D','E','E' }
如果列表中的当前和下一个字符相同,则应输入&#39; - &#39;的4个元素。字符和列表应该像
List<string> s = {'A','B','-','-','-','-','B','C','D','E','-','-','-','-','E' }
我能够通过多个for循环实现输出。我想避免循环并尝试通过一些linq或lambda表达式实现它。
答案 0 :(得分:3)
如果破折号的数量是固定的,您可以手动将它们放入,如下所示:
var res = s.SelectMany((v, i) =>
i > 0 && s[i - 1] == v ? new[] {"-", "-", "-", "-", v} : new[] { v }
).ToList();
答案 1 :(得分:0)
一个可能的解决方案,就是这个想法,是通过列表迭代一些循环和测试当前项目与最后一项。如果两者都相等,则可以使用material-ui-next
方法:
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as mui from 'material-ui';
import 'typeface-roboto';
function App() {
return (
<div>
<mui.Reboot />
<mui.AppBar color="primary" position="fixed">
<mui.Toolbar>
<mui.Typography color="inherit" type="title">
My Title
</mui.Typography>
</mui.Toolbar>
</mui.AppBar>
<mui.Paper>
My Content
</mui.Paper>
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById('container')
);
我希望它有所帮助。
答案 2 :(得分:0)
单循环
foreach (char c in FillIn(new List<char> { 'A', 'B', 'B', 'C', 'D', 'E', 'E' }))
Debug.WriteLine(c);
static IEnumerable<char> FillIn(IEnumerable<char> input)
{
char? cLast = null;
char filler = '-';
foreach(char c in input)
{
if (cLast == c)
{
yield return filler;
yield return filler;
yield return filler;
yield return filler;
}
cLast = c;
yield return c;
}
}