Создайте список строк, используя цикл foreach из списка двойников.каждые два значения должны быть сжаты в одну строку, а затем добавлены в список - PullRequest
0 голосов
/ 02 февраля 2019

Надеюсь, у кого-то было хорошее решение этой проблемы.

Итак, у меня есть список двойников, это координаты, например -123123, 12313. Это показано на рисунке ниже.

Список парных чисел

они используются в этом цикле foreach:

foreach (var coord in element.geometry.coordinates)
{


}

Я пытаюсь составить список указанных координат- но вместо того, чтобы они представляли собой список отдельных координат, мне нужно, чтобы они были сжаты в две части.

Таким образом, вместо списка

  • -1213123
  • 1345
  • -345
  • 1234535

Мне нужен список таких строк.

  • -1213123, 1345
  • -345, 1234535

с использованием var 'координата' - это единственная координата при выходе из цикла foreach.Как я могу создать список спаривания каждые два значения, которые выходят из цикла.

Спасибо за предоставленную помощь :)

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

если цикл foreach является обязательным, то

string[] lst = new string[element.geometry.coordinates.Count() / 2];

int i=0;
foreach (var coord in element.geometry.coordinates)
{
    if (i % 2 == 1) 
        lst[i-1] = $"{lst[i-1]}, coord";
    else
        lst[i] = coord

    ++i;

}
0 голосов
/ 02 февраля 2019

Я знаю, это выглядит немного странно, но вы можете использовать метод Linq.Zip.

        var coordinates = element.geometry.coordinates;
        var result = coordinates
            .Where((_, index) => index % 2 == 0) // Get even numbers
            .Zip(
                coordinates.Where((_, index) => index % 2 == 1), // Get odd numbers
                (first, second) => $"{first}, {second}") // Zip them together
            .ToList(); // If you need the result as List<string>
0 голосов
/ 02 февраля 2019

Вы не можете сделать шаг, отличный от 1 в цикле foreach.Поэтому я предлагаю использовать цикл for.Он может быть установлен на шаг 2.

var doubles = new List<double> { -1213123, 1345, -345, 1234535 };
var strings = new List<string>();

for (int i = 0; i < doubles.Count; i += 2)
{
    strings.Add(doubles[i] + ", " + doubles[i + 1]);
}

Не нужно дополнительных условных if операторов.Это решение оказывается максимально простым и эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...