комбинации: уход от нескольких вложил foreach

Если Вы готовы пользоваться внешней библиотекой, проверьте Apache Commons IO (JAR 200 КБ). Это содержит org.apache.commons.io.FileUtils.readFileToString() метод, который позволяет Вам читать все File в String с одной строкой кода.

Пример:

import java.io.*;
import java.nio.charset.*;
import org.apache.commons.io.*;

public String readFile() throws IOException {
    File file = new File("data.txt");
    return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
}

5
задан koen 23 July 2009 в 18:16
поделиться

4 ответа

Вы можете написать свой собственный класс Iterator, который реализует интерфейс Iterator . Затем вы можете заставить его конструктор принимать три массива, а затем использовать его для циклического перебора каждой комбинации с помощью foreach.

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

7
ответ дан 13 December 2019 в 19:33
поделиться

По логике вещей нужно как-то перебирать каждый элемент. Вы просто перемешиваете процесс.

Если несколько циклов for выглядят некрасиво, возможно, вам следует поместить ваши массивы в их собственные классы, которые имеют свои собственные инкапсулированные «проверки».

2
ответ дан 13 December 2019 в 19:33
поделиться

На самом деле вы не предоставили достаточно информации, чтобы узнать, какова альтернатива. Если вы действительно хотите вызвать method () со всеми комбинациями опций из $ as, $ bs и $ cs, то вложенные циклы будут делать то, что нужно.

Вас беспокоит многократное вложенное выполнение циклов, или тот факт, что Метод () вызывается count ($ as) * count ($ bs) * count ($ cs) раз?

1
ответ дан 13 December 2019 в 19:33
поделиться

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

1
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: