powered by simpleCommunicator - 2.0.20     © 2024 Programmizd 02
Map
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Получить все возможные варианты многомерного массива
12 сообщений из 12, страница 1 из 1
Получить все возможные варианты многомерного массива
    #40130978
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,
Пытаюсь получить рекурсией все возможные варианты, голову сломал но не получается

есть массив объектов, в каждом объекте есть минимальное и максимальное значение
нужно получить все комбинации от минимальных до максимальных значений для всего массива

заранее благодарю!

пример данных на выходе
1,11,30,65
7,12,45,77
3,14,49,69


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
List<TestClass> test_array = new List<TestClass>();

test_array.Add(new TestClass(1, 10));
test_array.Add(new TestClass(11, 20));
test_array.Add(new TestClass(30, 50));
test_array.Add(new TestClass(60, 100));


public class TestClass
{
	public double MinValue { get; set; }
	public double MaxValue { get; set; }
	public TestClass(double min_value, double max_value)
	{
		this.MinValue = min_value;
		this.MaxValue = max_value;
	}
}
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40130988
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Комбинации чего с чем?
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131015
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Makarov
1,11,30,65
7,12,45,77
3,14,49,69
интересный пример, можно расшифровать, как их указанных исходных данных получились эти числа?
Sergey Makarov
Пытаюсь получить рекурсией
а нужно прям рекурсией? тут пока вроде ей не особо пахнет...
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131024
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Добрый день,

в примере ниже в массив добавлено 4 объекта, у каждого объекта есть диапазон
минимальное и максимальное знание в нашем случае (1-10, 11-20, 30-50, 60-100)

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

к примеру
1,11,30,65

1 - это число из первого объекта в массиве где диапазон 1-10
11 - это число из второго объекта в массиве где диапазон 11-20
30 - это число из третьего объекта в массиве где диапазон 30-50
65 - это число из четвертого объекта в массиве где диапазон 60-100

рекурсия не обязательна, главное результат ))

благодарю
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131031
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Makarov,
почему 65-это минимальное число из диапазона 60-100?
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131032
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

так, вроде я не писал нигде что это минимальное,
это просто число из диапазона
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131035
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Makarov
в результате нужно получить все возможные комбинации значений этих массивов
то есть получается, диапазон рассматривается как набор значений?

Но тема комбинаций все-таки раскрыта не до конца.
1,1,1,1 - это допустимая комбинация? А 1,2,3,4?
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131036
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

авторто есть получается, диапазон рассматривается как набор значений?
да именно так, когда писал пост, забыл пояснить

автор1,1,1,1 - это допустимая комбинация? А 1,2,3,4?
нет это не допустимые комбинации, так как

1,2,3,4

1 - входит в числовой диапазон первого объекта
2 - не входит в числовой диапазон второго объекта
3 - не входит в числовой диапазон третьего объекта
4 - не входит в числовой диапазон четвертого объекта

т.е все нужны комбинации
{число из диапазона первого объекта},{число из диапазона второго объекта},{число из диапазона третьего объекта},{число из диапазона четвертого объекта},
надеюсь так понятнее
благодарю
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131044
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос, почему в примерах целые числа, а в классе - double
А если начало диапазона будет вещественным, то как этот диапазон вообще рассчитывать? Какие члены будут в него входить?
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131048
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

да Вы правы, можно упростить до integer,
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131050
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class Program
{
	static void Main(string[] args)
	{
		List<TestClass> test_array = new List<TestClass>();

		test_array.Add(new TestClass(1, 10));
		test_array.Add(new TestClass(11, 20));
		test_array.Add(new TestClass(30, 50));
		test_array.Add(new TestClass(60, 100));

		var acc = GetRange(test_array[0])
			.Select(n => Enumerable.Repeat(n, 1));

		foreach (var testClass in test_array.Skip(1))
		{
			acc = acc.SelectMany(n => GetRange(testClass), (n, p) => n.Concat(Enumerable.Repeat(p, 1)));
		}

		foreach (var ints in acc)
		{
			Console.WriteLine(string.Join(',', ints));
		}

		Console.ReadKey();
	}

	static IEnumerable<int> GetRange(TestClass testClass) => Enumerable.Range(testClass.MinValue, testClass.MaxValue - testClass.MinValue + 1);
}

public class TestClass
{
	public int MinValue { get; set; }
	public int MaxValue { get; set; }
	public TestClass(int min_value, int max_value)
	{
		this.MinValue = min_value;
		this.MaxValue = max_value;
	}
}



Ну, собственно, вот работающий код для целых чисел.
Под вещественные адаптируете, если понадобится.
Соответственно, нет никаких проверок на правильность заполнения исходного массива.
...
Рейтинг: 0 / 0
Получить все возможные варианты многомерного массива
    #40131058
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

А что так можно было?)))

Спасибо большое!!!!!!!!
Очень выручили!

Восхищаюсь людьми которые так элегантно пишут код!
Здоровья вам и вашим близким!
Еще раз спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Получить все возможные варианты многомерного массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]