Все комбинации с переменными петлями - PullRequest
0 голосов
/ 26 мая 2020

Мне нужно найти все комбинации нескольких переменных.

Пример:

У меня есть Field1 [] с 3 значениями: 36, 38, 40. и Field2 [] со значениями: R, V, A, B.

Затем с помощью этого кода у меня есть все комбинации.

for (int x=1;x<=3; x++)
{
    for (int y=1;y<=4;y++)
    {
        debug.print (Field1[x] + "--" + Field2[y]);
    }
}

Моя проблема не в длине «Field1» или «Field2». Моя проблема в том, что я не знаю, сколько у меня переменных «Поле1» или «Поле2». Иногда у меня может быть больше переменных FieldX, я не знаю сколько.

Как это сделать ??

Спасибо

Ответы [ 4 ]

2 голосов
/ 26 мая 2020

Это исполняемый пример с использованием for и foreach.

class Program
{
    static void Main(string[] args)
    {
        var numbers = new int[] { 36, 38, 40 };
        var letters = new char[] { 'R', 'V', 'A', 'B' };

        Console.WriteLine("Using for example:");

        for (int i = 0; i < numbers.Length; i++)
        {
            for (int j = 0; j < letters.Length; j++)
            {
                Console.WriteLine($"{numbers[i]} -- {letters[j]}");
            }
        }

        Console.WriteLine("Using foreach example:");

        foreach (var number in numbers)
        {
            foreach (var letter in letters)
            {
                Console.WriteLine($"{number} -- {letter}");
            }
        }
    }
}

Вывод:

Using for example:
36 -- R
36 -- V
36 -- A
36 -- B
38 -- R
38 -- V
38 -- A
38 -- B
40 -- R
40 -- V
40 -- A
40 -- B
Using foreach example:
36 -- R
36 -- V
36 -- A
36 -- B
38 -- R
38 -- V
38 -- A
38 -- B
40 -- R
40 -- V
40 -- A
40 -- B
1 голос
/ 28 мая 2020

Это может быть то, что вам нужно ... это Список объектов (массивов). Это даст вам ваш счет.

using System;
using System.Collections;
using System.Collections.Generic;

namespace ArrayCount
{
    class Program
    {
        public static void Main()
        {
            var numbers = new int[] { 36, 38, 40 };
            var letters = new char[] { 'R', 'V', 'A', 'B' };
            var words = new string[] { "this", "is", "the", "example" };

            List<object> arrayList = new List<object>
            {
                numbers,
                letters,
                words
            };

            Console.WriteLine("    Count:    {0}", arrayList.Count);
            Console.WriteLine("    Values:");
            PrintValues(arrayList);
        }

        public static void PrintValues(List<object> arrayList)
        {
            foreach (object obj in arrayList)
            {
                Console.WriteLine("---------------------");
                Console.WriteLine("Type: {0}", obj);
                foreach (var item in (IEnumerable)obj)
                {
                    Console.WriteLine("Value: {0}", item.ToString());
                }
            }
        }
    }
}

enter image description here

0 голосов
/ 26 мая 2020

Вы бы сделали что-то вроде этого:

for (int x = 0; x < Field1.Length; x++)
{
     for (int y = 0; y < Field2.Length; y++)
         Console.Write(Field1[x] + "--" + Field2[y]);
}

Или, используя LINQ, вам не нужно заботиться о свойстве Length, вы можете взять перекрестное произведение и выполнить итерацию по тому же

var pairs = (from a in Field1
             from b in Field2
             select new { val1 = a, val2 = b }).ToList();

pairs.ForEach(x => Console.WriteLine(x.val1+ "--" + x.val2));
0 голосов
/ 26 мая 2020

Вы должны использовать Length массива

for (int x=0; x < Field1.Length; x++)
{
    for (int y=0; y < Field2.Length; y++)
    {
        debug.print (Field1[x] + "--" + Field2[y]);
    }
}

Или вы можете использовать foreach l oop

foreach (int x in Field1)
{
    foreach (int y in Field2)
    {
       System.Console.Write($"x:{x} y:{y}");
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...