Объединить строки списка массивов на основе определенных элементов КАК - PullRequest
2 голосов
/ 17 мая 2011

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

Мой текстовый файл выглядит так:

0, 0. 50 0.5 66;
1, 0. 69 2. 70;
2, 0.5 48 0.5 71;
3, 1. 47 1. 75;
4, 2. 52 1. 74;
5, 2. 71 1. 80;
6, 3. 65 1. 61;
7, 4. 62 1. 68;

Я ищу результаткак это:

0, 0. 50 0.5 66 0. 69 2. 70;
1, 0,5 48 0,5 71;
2, 1. 47 1. 75;
3, 2. 52 1. 74 2. 71 1. 80;
4, 3, 65, 1. 61;
5, 4. 62 1. 68;

Вторые элементы первых двух записей одинаковы (0.), и я хотел бы объединить эти записи в одной строке.То же самое для строк 4 и 5.

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

У меня нет кода для отображения, потому что я не знаю, с чего начать.

Я ценю любой ввод.

Ответы [ 2 ]

5 голосов
/ 17 мая 2011

Я бы не использовал список, я бы использовал карту. Карта имеет метод

put(key, value)

Итак, если вас интересует второй столбец данной строки, я бы сделал что-то вроде (псевдокод)

Map<String, String> lookup = new HashMap<String, String>();

for (...) {  // loop over the lines in the file

    String key = getSecondFieldFromLine(line); // implement this
    String val = lookup.get(key);


    if (val != null ) {
        merge(val, line);  // implement this according to whatever merge means
    }

    lookup.put(key, val);
}

Возможно, вам придется настроить это (например, сохранить результат слияния, чтобы поместить в поиск), что вы здесь делаете, используя тот факт, что для операций Map, put и get действительно быстро (HashMap использует метод hashCode для каждого объекта). Таким образом, вы можете легко определить, есть ли у вас строка с полем, которое вы ищете, поскольку вы используете поле интереса в качестве ключа, чтобы посмотреть, как это поле.

0 голосов
/ 17 мая 2011

Я бы проанализировал ввод в список списков (или массив массивов или любую другую коллекцию, которую вы предпочитаете).Я бы реализовал Comparator , который сравнивает на основе второго элемента в списке.Затем вы можете отсортировать ваш основной список или array .Наконец, вы можете перебирать свой список списков, комбинируя смежные списки, используя любую комбинаторную логику, создавая новый список в качестве результата.

С другой стороны, если ваш ввод всегда будет сортироваться каквы показываете, тогда вы можете вообще пропустить реализацию и сортировку компаратора и просто перебрать свою коллекцию, выполнив комбинации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...