在同一列表的两个相似元素之间插入多个元素

时间:2018-01-29 19:03:53

标签: c# linq

我想在同一个列表的两个元素之间添加多个元素。以下是代码段。

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表达式实现它。

3 个答案:

答案 0 :(得分:3)

如果破折号的数量是固定的,您可以手动将它们放入,如下所示:

var res = s.SelectMany((v, i) =>
    i > 0 && s[i - 1] == v ? new[] {"-", "-", "-", "-", v} : new[] { v }
).ToList();

Demo.

答案 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;
    }
}