如何将[x]和[x + 1]转换为字符串然后跳到[x + 2]

时间:2011-05-06 08:43:20

标签: c# arraylist

输入:1;一个 ; 2; b; 3; C; 4; d; 5,E 6;˚F

输出我得到:1a; A2; B3; C4; D5; E6

我想要的输出:1a; 2b; 3C; 4d; 5E; 6F

我知道这是一件很简单的事情,但我似乎无法将我该死的头围绕在它周围......

继承我的代码:

 for (int x = 0; x < coll.Count; x++)
        {
            if (x == 0)
            {
                line.Append(coll[x].ToString());
                line.AppendLine(coll[x + 1].ToString());
            }
            else
            {

                if (x % 2 == 0)
                {

                }
                else
                {
                    try
                    {
                        line.Append(coll[x].ToString());
                        line.AppendLine(coll[x + 1].ToString());
                        x++;
                        textBox1.Text = line.ToString();
                    }
                    catch { }
                }
            }

4 个答案:

答案 0 :(得分:1)

如果你想保持代码的方式(我假设某些东西将进入空条件),那么你只需要将if (x % 2 == 0)更改为if (x % 2 != 0)(或同等地{{ 1}}),因为你的代码当前在i = 0时附加到行,然后是1,3,...,即所有奇数编号的索引,而你需要在所有偶数编号索引处追加到该行。

(不幸的是我无法编辑您的问题,但如果您只是在以if (x % 2 == 1)开头的行前面留下四个空格,那么它应该正确格式化。)

答案 1 :(得分:0)

如果你的列表是= [1,a,2,b,3,c,4,d,5,e,6,f] 试试这个;

String line = "";
for(int i=0;i<list.size();i+2){
  line += list.get(i)+list.get(i+1);      
}
  textBox1.Text = line;

修改 如果你想要半冒号;

我编辑了

    String line = "";
    for(int i=0;i<list.size();i+2){
      line += list.get(i)+list.get(i+1);  
      if(i != list.size() - 2){
        line+=";";
      }
    }
      textBox1.Text = line;

答案 2 :(得分:0)

使用LINQ的一行代码(但效率不高):

string[] source = { "1", "a", "2", "b", "3", "c" };
var result = source.Zip(source.Skip(1), (s1, s2) => s1 + s2)
                        .Where((s, i) => i % 2 == 0);
string[] arrayResult = result.ToArray();
string stringResultWithSeperator = string.Join(";", result);

答案 3 :(得分:0)

另一个LINQy解决方案:

string input = "1;a;2;b;3;c;4;d;5;e;6;f";

var split = input.Split(';');

string rejoined = String.Join(";", Pairs(split));

Pairs

的位置
IEnumerable<string> Pairs(IEnumerable<string> strings)
{
    if (strings.Take(1).Count() == 0)
    {
        return new string[]{};
    }
    return new [] {String.Join("", strings.Take(2))}.Concat(Pairs(strings.Skip(2)));
}