124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
1

Использование двух массивов в одном цикле foreach

02.07.2014, 10:23. Показов 12838. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане!

Пожалуйста, подскажите. Можно ли использовать два массива разного типа, т.е. две переменные по каждой из массива в одном цикле? Первая переменная wheel и вторая переменная Tire. Нужно в процедуре сохранения подставлять переменные из массивов, так: 1) NoseWheelLH, tire1; 2)NoseWheelRH, tire2; и т.д.
Как прилепить к одному циклу? Если дописать foreach (decimal Tire in TirePressure) как указано в коде, то цикл в цикле получается.
C#
1
2
3
4
5
6
7
8
9
10
string[] wheelarray = new string[] { NoseWheelLH, NoseWheelRH, MainWheel1, MainWheel2, MainWheel3, MainWheel4, MainWheel5, MainWheel6, MainWheel7, MainWheel8 };
            decimal[] TirePressure = new decimal[] { tire1, tire2, tire3, tire4, tire5, tire6, tire7, tire8, tire9, tire10 };
            foreach (string wheel in wheelarray) 
            //foreach (decimal Tire in TirePressure)
            {
            SqlCommand WheelDataCom = new SqlCommand("INSERT INTO [WheelData] (ID_RPart,TirePressure,Date) VALUES (@PrmID_RPart,@PrmTirePressure,@PrmDate)", con);
            WheelDataCom.Parameters.AddWithValue("@PrmID_RPart", Convert.ToInt16(wheel));
            WheelDataCom.Parameters.AddWithValue("@PrmTirePressure", Tire);
            WheelDataCom.Parameters.AddWithValue("@PrmDate", WCDatedateTimePicker.Text);
            WheelDataCom.ExecuteNonQuery();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2014, 10:23
Ответы с готовыми решениями:

Скажите, есть ли возможность как-нибудь сделать, чтобы в цикле foreach обрабатывались данные из двух массивов?
Скажите есть возможность как-нибудь сделать чтобы в цикле foreach обрабатывались данные из двух...

Использование ListBox в цикле foreach
Здравствуйте уважаемые Гуру! Нужен ваш совет Есть цикл foreach, в котором перебираются строки...

Пожалуйста подскажите о цикле перебора массивов foreach
Не могу найти материал который бы точно изложил суть цикла перебора массива foreach Вот пример: ...

Foreach двух массивов
Подробно 1 массив $country Содержит подобное содержание: "RU":1700,"AF":800 Код страны и...

14
Неадекват
1485 / 1224 / 245
Регистрация: 02.04.2010
Сообщений: 2,783
02.07.2014, 10:48 2
Можно попробовать как то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Linq;
 
namespace ConsoleApplication32
{
    class Program
    {
        static void Main(string[] args)
        {
            var strArray = new string[] { "one", "two", "three", "four", "five", "six", "seven" };
            var decArray = new decimal[] { 5, 6, 7, 8, 9, 0 };
 
 
            foreach (var item in Enumerable.Range(0, Math.Min(strArray.Length, decArray.Length)).Select(x => new { Str = strArray[x], Dec = decArray[x] }))
            {
                Console.WriteLine("{0}\t{1}", item.Str, item.Dec);
            }
 
            Console.ReadKey();
        }
    }
}
1
6277 / 3562 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
02.07.2014, 10:54 3
Лучший ответ Сообщение было отмечено ac1-caesar как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Ghost
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] strArray = new string[] { 
                "one", "two", "three", "four", 
                "five", "six", "seven" };
            decimal[] decArray = new decimal[] { 5, 6, 7, 8, 9, 0 };
 
            IEnumerable<Tuple<string, decimal>> seq = strArray.Zip(
                decArray,
                (str, dec) => new Tuple<string, decimal>(str, dec));
 
            foreach (Tuple<string, decimal> tuple in seq)
            {
                Console.WriteLine("{0}\t{1}", tuple.Item1, tuple.Item2);
            }
        }
    }
}
1
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 11:02  [ТС] 4
Ого как закручено... Ну, а как мне прилепить переменные на моем примере?
Так?
C#
1
2
3
4
5
foreach (Tuple<string, decimal> tuple in seq)
            {
               WheelDataCom.Parameters.AddWithValue("@PrmID_RPart",  "{0}\t{1}", tuple.Item1);
               WheelDataCom.Parameters.AddWithValue("@PrmTirePressure", "{0}\t{1}",  tuple.Item2);
            }
0
6277 / 3562 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
02.07.2014, 11:11 5
C#
1
WheelDataCom.Parameters.AddWithValue(tuple.Item1, tuple.Item2);
0
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 11:53  [ТС] 6
Петррр, так у меня то два параметра.
Так корректно?
C#
1
2
 WheelDataCom.Parameters.AddWithValue("@PrmID_RPart",  tuple.Item1); // параметр с переменной wheel
 WheelDataCom.Parameters.AddWithValue("@PrmTirePressure",  tuple.Item2); // параметр с переменной Tire
0
Администратор
Эксперт .NET
9427 / 4714 / 760
Регистрация: 17.04.2012
Сообщений: 9,570
Записей в блоге: 14
02.07.2014, 13:05 7
Переделка кода freeba
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections;
 
namespace ConsoleApp
{
    internal class Program
    {
        static void Main(string[] args) {
            var strArray = new string[] 
                { "one", "two", "three", "four", "five", "six", "seven" };
            var decArray = new decimal[] { 5, 6, 7, 8, 9, 0 };
            IList collection = strArray.Length < decArray.Length
                ? (IList)strArray : (IList)decArray;
            for (int i = 0; i < collection.Count; i++) {
                Console.WriteLine("{0} : {1}", strArray[i], decArray[i]);
            }
        }
    }
}
0
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 15:54  [ТС] 8
tezaurismosis, я так и не понял как вставить в мои параметры??
Так нужно?

C#
1
2
WheelDataCom.Parameters.AddWithValue("@PrmID_RPart", strArray[i]); // параметр с переменной wheel
WheelDataCom.Parameters.AddWithValue("@PrmTirePressure",  decArray[i]); // параметр с переменной Tire
0
Администратор
Эксперт .NET
9427 / 4714 / 760
Регистрация: 17.04.2012
Сообщений: 9,570
Записей в блоге: 14
02.07.2014, 16:15 9
Я и сам толком вашу задачу не понял (точнее, не понял вашего API), так что пробуйте.
Весь код здесь - как наводка по вопросу
Цитата Сообщение от ac1-caesar Посмотреть сообщение
Можно ли использовать два массива разного типа, т.е. две переменные по каждой из массива в одном цикле?
0
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 17:30  [ТС] 10
Хочу в процедуре вставки менять два параметра. С одним - "WheelDataCom.Parameters.AddWithValue("@PrmID_RPart", Convert.ToInt16(wheel));" проблем нет (код ниже),
C#
1
2
3
4
5
6
7
8
9
10
string[] wheelarray = new string[] { NoseWheelLH, NoseWheelRH, MainWheel1, MainWheel2, MainWheel3, MainWheel4, MainWheel5, MainWheel6, MainWheel7, MainWheel8 };
            foreach (string wheel in wheelarray) 
            
            {
            SqlCommand WheelDataCom = new SqlCommand("INSERT INTO [WheelData] (ID_RPart,TirePressure,Date) VALUES (@PrmID_RPart,@PrmTirePressure,@PrmDate)", con);
            WheelDataCom.Parameters.AddWithValue("@PrmID_RPart", Convert.ToInt16(wheel));
            WheelDataCom.Parameters.AddWithValue("@PrmTirePressure", NLGWLHnumericUpDown.Value);
            WheelDataCom.Parameters.AddWithValue("@PrmDate", WCDatedateTimePicker.Text);
            WheelDataCom.ExecuteNonQuery();
            }
а вот с двумя не знаю как...
Можно конечно и без цикла 10 раз повторить процедуру подставляя нужные значения, но че то кажется можно цикл задействовать.

Добавлено через 1 час 5 минут
Петррр, подскажите пожалуйста, Tuple - представляет кортеж из двух компонентов или пару. А если несколько переменных, т.е. больше 2-х, тогда что спасает?
0
1126 / 859 / 501
Регистрация: 09.04.2014
Сообщений: 2,030
02.07.2014, 17:46 11
Я понимаю, что с foreach позаковыристей (интересней) будет, но все-таки почему бы Вам не использовать цикл
C#
1
2
3
4
5
6
for(int i=0; i<wheelarray.Length && i<TirePressure.Length; ++i)
{
string wheel=wheelarray[i];
decimal Tire=TirePressure[i];
.....
}
1
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 18:00  [ТС] 12
nedel, а не знаю как. Можете к моему примеру пристроить (для наглядности)?
0
6277 / 3562 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
02.07.2014, 18:16 13
Tuple - это кортеж, и засунуть туда можно до семи значений.
1
1126 / 859 / 501
Регистрация: 09.04.2014
Сообщений: 2,030
02.07.2014, 18:27 14
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
string[] wheelarray = new string[] { NoseWheelLH, NoseWheelRH, MainWheel1, MainWheel2, MainWheel3, MainWheel4, MainWheel5, MainWheel6, MainWheel7, MainWheel8 };
            decimal[] TirePressure = new decimal[] { tire1, tire2, tire3, tire4, tire5, tire6, tire7, tire8, tire9, tire10 };
for(int i=0; i<wheelarray.Length && i<TirePressure.Length; ++i)
{
string wheel=wheelarray[i];
decimal Tire=TirePressure[i];
SqlCommand WheelDataCom = new SqlCommand("INSERT INTO [WheelData] (ID_RPart,TirePressure,Date) VALUES (@PrmID_RPart,@PrmTirePressure,@PrmDate)", con);
            WheelDataCom.Parameters.AddWithValue("@PrmID_RPart", Convert.ToInt16(wheel));
            WheelDataCom.Parameters.AddWithValue("@PrmTirePressure", Tire);
            WheelDataCom.Parameters.AddWithValue("@PrmDate", WCDatedateTimePicker.Text);
            WheelDataCom.ExecuteNonQuery();
}
1
124 / 3 / 0
Регистрация: 29.07.2013
Сообщений: 249
02.07.2014, 18:30  [ТС] 15
Нда, ларчик просто открывался....
0
02.07.2014, 18:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2014, 18:30
Помогаю со студенческими работами здесь

Изменение элементов 2х массивов в одном цикле
Ребята, подскажите пожалуйста - нигде не найду в интернете примера, как в Mathcad менять значения...

Перебор двух массивов в foreach
Доброго времени суток, есть два строковых массива с одинаковым количеством элементов и метод,...

Вывод двух разных массивов API в один foreach
Доброго времени суток, коллеги. Подскажите, как сделать такой же вывод как здесь...

Вывести в одном цикле результат двух запросов
Как 2 SQL-запроса: на выборку отдельно из таблицы ... и из таблицы ... вывести в одном цикле


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru