Множественный поиск для нескольких данных списка

#c# #foreach

#c# #foreach

Вопрос:

У меня есть список из 2 строк.

 var justiceCourtName = formCollection["JusticeCourtName"];
var courtId = formCollection["CourtID"];
var justiceCourtNameList = justiceCourtName.Split(',');
var courtIdList = courtId.ToList();
 

justiceCourtNameList значения ниже:

 "New York"

"Paris"
 

Значения courtIdList ниже:

 "10.33"

"43.15"
 

Мой вопрос:

После этого мне нужно использовать foreach для justiceCourtNameList и courtIdList , из justiceCourtNameList в Name (ниже) и из courtIdList в lawCourtId один за другим.

Но я не знаю, как я могу установить justiceCourtNameList и courtIdList один за другим в new LawCourt ?

 var lawCourt = new LawCourt { JusticeCourtID = lawCourtId, Name = lawCourtName };


ServiceLibraryHelper.LawServiceHelper.UpdateLawCourt(lawCourt); // Update
 

Комментарии:

1. редактирование в порядке, пожалуйста, помогите, спасибо

2. Вы пытаетесь получить каждую комбинацию justiceCourtNameList и courtIdList или что-то еще? Вопрос далеко не ясен.

3. как я могу использовать множественный foreach спасибо

4. если количество nameList и idList одинаковы, вы можете использовать цикл for …

5. «Как я могу …»: существует несколько вариантов «использовать несколько foreach циклов», что имеет смысл, зависит от того, что вы пытаетесь сделать. Но это не ясно (конечно, иногда кто-то угадывает правильно).

Ответ №1:

Если я правильно понял ваш вопрос, вам нужен метод Zip расширения:

 var results = courtIdList
                  .Zip(justiceCourtNameList,
                       (lawCourtId, lawCourtName) =>
                           new LawCourt
                           {
                               JusticeCourtID = lawCourtId,
                               Name = lawCourtName
                           )};
 

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

Ответ №2:

Enumerable.Zip Возможно, это может послужить вашей цели (ссылка MSDN):

 int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first   " "   second);

foreach (var item in numbersAndWords)
    Console.WriteLine(item);

// This code produces the following output:

// 1 one
// 2 two
// 3 three
 

Ответ №3:

Используйте не foreach operator, а for operator . Перед этим убедитесь, что оба массива имеют одинаковую длину.

 List<string> justiceCourtNameList = ...
List<double> courtIdList = ...

if(justiceCourtNameList.Count != courtIdList.Count) {
    throw new ArgumentException("justiceCourtNameList and courtIdList must have the same length");
}

for(int i=0; i<justiceCourtNameList.Count; i  ) {

    string justiceCourtName = justiceCourtNameList[i];
    double courtId = courtIdList[i];

    // DO HERE WHATEVER YOU WANT HERE
}
 

Двойная синхронная итерация с foreach невозможна.