Объединение нескольких значений из списка <string> - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я работаю над этим маленьким проектом, и у меня возникли трудности с его выполнением: как показано на рисунке, в моем Quickwatch есть 4 значения.

enter image description here

значения, из которых 0 соответствует 2, а 1 соответствует 3 и т. Д. (Может быть неограниченным )

До сих пор я заставлял код работать, просто помещая его в foreach, но он не соединяет 0 с 2 и 1 с 3 и так далее. (в зависимости от максимального количества в списке)

Желаемый результат: (ссылаясь на quickwatch)

usb_device содержит:

[0] и [2] вместе Результат: Диск F ... Vid: 0781`

[, 1] и [3] вместе, в результате: Диск D ... Vid: 125F`

Actual result: (see quickwatch), everything is stacked underneath but not yet joined as such by the desired result.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Вы действительно захотите изменить свой l oop на a для l oop вместо a для каждого l oop. Предположим, что Usb.FindDevices.Get () всегда возвращает четное число и всегда находится в правильном порядке. Потому что в противном случае вам понадобится совершенно другое решение, в котором вы найдете взаимосвязь между ними и обработаете крайние случаи, такие как нечетное количество записей.

Если это так, тогда нам нужно вычислить общее количество устройств, я предполагаю, что это половина числа записей, поэтому мы должны сделать это:

int totalDeviceCount = usb_devices.Count / 2;

Затем вы захотите l oop через наши «устройства», которые являются первой половиной list и одновременно добавьте вторую половину списка.

for(int i = 0; i < totalDeviceCount; i++) {
{
    SystemLog.AppendText(String.Format("{0} - {1}", usb_devices[i], usbdevices[i + totalDeviceCount]));
}

То, что это будет делать в вашем примере ввода, помещается, возьмите первый [0] и третий [2] и соедините их, добавив общее количество устройств (2) в текущую переменную i, затем на 2-й итерации через l oop он захватит [1] и [3]. На следующей итерации i будет равно 2 и больше не будет меньше, чем общее количество устройств, поэтому он выйдет из l oop.

Надеюсь, что это поможет!

0 голосов
/ 19 июня 2020

Попробуйте что-то вроде этого:

var col = new List<string>() { "0", "1", "2", "3" };

var pairs = col.Take(col.Count / 2)
               .Select((s, i) => (s, col[i + col.Count / 2] ))
               .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...