0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 33
1

Объединить массивы исключая повторения

01.03.2014, 22:20. Показов 5410. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
дано два массива
1. (1, 2, 3, 5)
2. (2, 4, 5, 6)
как сделать так чтобы в 3 массиве получилось (1, 2, 3, 4, 5, 6), то есть в третий массив залить только те которые не повторяются.
но не используя коллекции, и прочие навороты
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2014, 22:20
Ответы с готовыми решениями:

Перебор содержимого LIST<>: попарно сравнить все элементы листа исключая возможность повторения
Задача такова. В листе хранятся адреса файлов, есть отдельный метод сравнения этих файлов....

Объединить массивы в один с сохранением упорядоченности
Помогите пожалуйста! Даны два массива, упорядоченные по возрастанию и заданные численно: Пример:...

Объединить исходные массивы в массив С (25) и распечатать его
Буду безумно признательна, если кого-то заинтересует данная задача и мне помогут её решить. Нужен...

Объединить массивы так, чтобы результирующий массив C остался упорядоченным по возрастанию
1.Даны два массива A и B, элементы которых упорядочены по возрастанию. Объединить эти массивы так,...

5
8938 / 4850 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.03.2014, 05:24 2
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Две функции, основная и вспомогательная
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void Union<T>(T[] a, T[] b, ref T[] c)
{
    Array.Resize<T>(ref c, a.Length);
    a.CopyTo(c, 0);
    foreach (T item in b)
    {
        if (!Exist<T>(item, a))
        {
            Array.Resize<T>(ref c, c.Length + 1);
            c[c.GetUpperBound(0)] = item;
        }
    }
}
static bool Exist<T>(T a, T[] b)
{
    foreach (T item in b)
        if (a.Equals(item)) return true;
    return false;
}
Использование:
C#
1
2
3
4
5
6
int[] a = new int[4] { 1, 2, 3, 5 };
int[] b = new int[4] { 2, 4, 5, 6 };
int[] c = new int[] { };
Union<int>(a, b, ref c);
foreach (int item in c)
    Console.Write(item.ToString());
0
97 / 90 / 18
Регистрация: 09.06.2012
Сообщений: 215
02.03.2014, 06:45 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 var list1 = new int[4] { 1, 2, 3, 5 };
            var list2 = new int[4] { 2, 4, 5, 6 };
            var listExcept = list2.Except(list1);
 
            var listItog = new List<int>();
            listItog.AddRange(list1);
            listItog.AddRange(listExcept);
 
            var list3 = listItog.ToArray();
            foreach (var i in list3.OrderBy(x => x))
            {
                Console.Write("{0} ", i);
            }
0
8938 / 4850 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.03.2014, 06:50 4
iptables,
Цитата Сообщение от ting Посмотреть сообщение
не используя коллекции, и прочие навороты
0
97 / 90 / 18
Регистрация: 09.06.2012
Сообщений: 215
02.03.2014, 07:52 5
Ахх, дааа (((
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
02.03.2014, 09:40 6
Лучший ответ Сообщение было отмечено ting как решение

Решение

Несколько другой вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static int[] Union2(int[] first, int[] second) {
    int[] result = new int[first.Length + second.Length];
    first.CopyTo(result, 0);
    int count = first.Length;
 
    for (int i = 0; i < second.Length; i++) {
        if (Array.Exists(result, s => s == second[i]) == false)
            result[count++] = second[i];
    }
 
    Array.Resize(ref result, count);
    return result;
}
Если не желаете использовать предикат, можно использовать метод Exist от ViterAlex, замените строку 7 на
C#
1
if (Exist(second[i], result) == false)
Если нужно, тут обобщённый вариант
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static T[] Union2<T>(T[] first, T[] second) {
    T[] result = new T[first.Length + second.Length];
    first.CopyTo(result, 0);
    int count = first.Length;
 
    for (int i = 0; i < second.Length; i++) {
        if (Array.Exists(result, s => s.Equals(second[i])) == false)
            result[count++] = second[i];
    }
 
    Array.Resize(ref result, count);
    return result;
}
1
02.03.2014, 09:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2014, 09:40
Помогаю со студенческими работами здесь

Объединить массивы так, чтобы результирующий массив остался упорядоченным по возрастанию
Даны два массива A и B, элементы которых упорядочены по возрастанию. Объединить эти массивы так,...

Объединить массивы А размера 7 и В размера 8, предварительно удалив максимальные элементы этих массивов
Объединить массивы А размера 7 и В размера 8, предварительно удалив максимальные элементы этих...

Вывести все возможные перестановки слов в предложении исключая повторения
надо вывести все возможные перестановки слов в предложении исключая повторения т.е. перестановки не...

Даны два численных файла. Выполнить слияние этих файлов. Сохранить упорядоченно по возрастанию в третий файл исключая повторения
Добрый день. Прблемка следущая: я написал программку для слияния двух файлов в третий((((Даны два...


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

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

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