Как получить [x] и [x + 1] в строку, а затем перейти к [x + 2] - PullRequest
1 голос
/ 06 мая 2011

Вход: 1;а;2;б;3; c; 4; d; 5; e; 6; f

вывод Я получаю: 1a;a2; b3; c4; d5; e6

вывод, который я хочу: 1a;2б;3в;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 ]

1 голос
/ 06 мая 2011

Если вы хотите сохранить код таким, какой он есть (я предполагаю, что что-то пойдет в пустом условном выражении), тогда вам просто нужно изменить if (x % 2 == 0) на if (x % 2 != 0) (или равно if (x % 2 == 1)), как Ваш код в настоящее время добавляется к строке, когда i = 0, затем 1, 3, ... то есть все нечетные индексы, тогда как вам нужно добавлять к строке все четные индексы.

(К сожалению, я не могу отредактировать ваш вопрос, но если вы просто вставите четыре пробела перед строкой, начинающейся с for, тогда он должен быть отформатирован правильно.)

0 голосов
/ 06 мая 2011

Другое решение 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)));
}
0 голосов
/ 06 мая 2011

Однострочный код с 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);
0 голосов
/ 06 мая 2011

Если ваш список похож на = [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;

EDIT И если вы хотите полуколонны;

Я редактировал как

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...