Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / классы,массивы / 22 сообщений из 22, страница 1 из 1
30.10.2013, 07:10
    #38446064
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Добрый день,
Возникла проблема с массивами.
Изначально,то что у меня есть:
2 csv файла, описал класс добавления в массив и вывод на в консоли, запутался как теперь сравнить 2 массива и если из первого массива нашли вхождение во втором, то вывести на экран.
Скажу сразу, что я новичок, поэтому не претендую на истину,в том как реализовал, сильно не пинайте.
Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string line,line2;
            int counter = 0;
            int count2 = 0;
            GList l = new GList();
            GList k = new GList();
            StreamReader file = new StreamReader(@"c:\test1.csv");
            while ((line = file.ReadLine()) != null)
            {          
              
                l.Add(line);
                counter++;
            }
            file.Close();
            l.Show();

            Console.WriteLine("There were {0} lines.", counter);
            Console.WriteLine("---------------------------------------------");
            Console.WriteLine("---------------------------------------------");
            StreamReader file1 = new StreamReader(@"c:\test2.csv");
            while ((line1 = file1.ReadLine()) != null)
            {          
              
                k.Add(line);
                count2++;
            }
            file1.Close();
            k.Show();
            Console.WriteLine("There were {0} lines.", count2);
            
            Console.ReadLine(); 


           

        }
        
    }


    class GList
    {
        string[] array;

        public GList()
        {
            array = new string[0];
        }

        public int Count
        {
            get
            {
                return array.Length;
            }
        }

        public void Add(string value)
        {
            string[] buf = new string[array.Length];
            for (int i = 0; i < buf.Length; i++)
                buf[i] = array[i];
            array = new string[buf.Length + 1];
            for (int i = 0; i < buf.Length; i++)
                array[i] = buf[i];
            array[array.Length - 1] = value;
        }

        public void Show()
        {
            for (int i = 0; i < array.Length; i++)
                Console.WriteLine(array[i]);
        }

        public void Srav(string[] arr0, string[] arr1)
        {
            for (int i = 0; i < arr0.Length; i++)
            {
                if (arr0[i] == arr1[i])
                {
                    Console.WriteLine(arr0[i]);
                }

            }
        }

    }

}



class GList реализован, для возможного добавления в массив строк из прочтенных файлов, визуально всё работает, файлы читаются, добавляются в массив и с помощью метода Show() выводятся.Для контроля сколько получилось строк,вывожу на экран количество строк,всё ок.
Теперь мне нужно сравнить два набора l и k.
Написал метод Srav(), но получается это внутри класса для одного набора,в основном методе Main,я его никак не воспользую, если конечно правильно понимаю.
Т.е. мне нужно сравнить 2 массива, если строка из первого массива равна строке во втором,то вывести на экран
Форумчане, можете поправить?Что я делаю не так?
...
Рейтинг: 0 / 0
30.10.2013, 10:49
    #38446255
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stellclass GList реализован, для возможного добавления в массив строк из прочтенных файлов, визуально всё работает, файлы читаются, добавляются в массив и с помощью метода Show() выводятся.Для контроля сколько получилось строк,вывожу на экран количество строк,всё ок.
Теперь мне нужно сравнить два набора l и k.
Написал метод Srav(), но получается это внутри класса для одного набора,в основном методе Main,я его никак не воспользую, если конечно правильно понимаю.
Т.е. мне нужно сравнить 2 массива, если строка из первого массива равна строке во втором,то вывести на экран
Форумчане, можете поправить?Что я делаю не так?

курсовую делаешь?
1. вместо массивов используй List<>
2. для сравнения сделай static метод
...
Рейтинг: 0 / 0
30.10.2013, 13:22
    #38446549
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
pationdenis_stellclass GList реализован, для возможного добавления в массив строк из прочтенных файлов, визуально всё работает, файлы читаются, добавляются в массив и с помощью метода Show() выводятся.Для контроля сколько получилось строк,вывожу на экран количество строк,всё ок.
Теперь мне нужно сравнить два набора l и k.
Написал метод Srav(), но получается это внутри класса для одного набора,в основном методе Main,я его никак не воспользую, если конечно правильно понимаю.
Т.е. мне нужно сравнить 2 массива, если строка из первого массива равна строке во втором,то вывести на экран
Форумчане, можете поправить?Что я делаю не так?

курсовую делаешь?
1. вместо массивов используй List<>
2. для сравнения сделай static метод

неа.
1. ок
2. статик описывать внутри класса? если можно пример?
...
Рейтинг: 0 / 0
30.10.2013, 13:23
    #38446556
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stell,

Код: c#
1.
2.
3.
4.
5.
6.
7.
public static void Srav(string[] arr0, string[] arr1)
{
...
}

...
GList.Srav(k,l);
...
Рейтинг: 0 / 0
30.10.2013, 14:50
    #38446749
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Про сравнение массивов.. Тебе надо отобразить те строки, которые есть в обоих файлах (тогда у тебя реализация не верна) или вывести те строки, которые есть в обоих файлах и на "одинаковых позициях" (порядковый номер строки)?
...
Рейтинг: 0 / 0
30.10.2013, 15:00
    #38446769
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
BelavikПро сравнение массивов.. Тебе надо отобразить те строки, которые есть в обоих файлах (тогда у тебя реализация не верна) или вывести те строки, которые есть в обоих файлах и на "одинаковых позициях" (порядковый номер строки)?

мне нужно:
есть 2 а массива(список)
в каждом набор строк, например первый массив это исходный файл, второй - набор строк. нужно проверить строки из 1 и 2 массива, если строка первого массива = строке 2 массива вывести эту строку.позиции не совпадают
...
Рейтинг: 0 / 0
30.10.2013, 15:03
    #38446777
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stellпозиции не совпадают

а у тебя Srav выведет те, которые одинаковые и только на одних и тех же позициях
...
Рейтинг: 0 / 0
30.10.2013, 15:04
    #38446779
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
И если массив arr1 короче arr0, то вывалится исключение
...
Рейтинг: 0 / 0
30.10.2013, 15:05
    #38446781
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stellBelavikПро сравнение массивов.. Тебе надо отобразить те строки, которые есть в обоих файлах (тогда у тебя реализация не верна) или вывести те строки, которые есть в обоих файлах и на "одинаковых позициях" (порядковый номер строки)?

мне нужно:
есть 2 а массива(список)
в каждом набор строк, например первый массив это исходный файл, второй - набор строк. нужно проверить строки из 1 и 2 массива, если строка первого массива = строке 2 массива вывести эту строку.позиции не совпадают
Тогда тебе надо два цикла (по твоей реализации). Но если воспользуешься List<>, то можно проще
...
Рейтинг: 0 / 0
30.10.2013, 15:10
    #38446793
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Pallarisdenis_stell,

Код: c#
1.
2.
3.
4.
5.
6.
7.
public static void Srav(string[] arr0, string[] arr1)
{
...
}

...
GList.Srav(k,l);



не подскажете, чем плох вариант с массивом?именно списком делать?
...
Рейтинг: 0 / 0
30.10.2013, 15:13
    #38446801
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stellPallarisdenis_stell,

Код: c#
1.
2.
3.
4.
5.
6.
7.
public static void Srav(string[] arr0, string[] arr1)
{
...
}

...
GList.Srav(k,l);




не подскажете, чем плох вариант с массивом?именно списком делать?
Хоть и не мне. Если нет задачи реализовать с помощью массива, то конечно списки. Получится избежать много ошибок и код заметно станет красивее и меньше
...
Рейтинг: 0 / 0
30.10.2013, 15:15
    #38446807
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Belavikdenis_stellпропущено...


мне нужно:
есть 2 а массива(список)
в каждом набор строк, например первый массив это исходный файл, второй - набор строк. нужно проверить строки из 1 и 2 массива, если строка первого массива = строке 2 массива вывести эту строку.позиции не совпадают
Тогда тебе надо два цикла (по твоей реализации). Но если воспользуешься List<>, то можно проще


честно скажу list<> не пользовался, можно примерчиком, как мне сделать?
...
Рейтинг: 0 / 0
30.10.2013, 15:16
    #38446812
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stell,
Код: 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.
static void Main(string[] args)
        {
            var s1 = new[] { "dddddd", "dfdfdfdf","erwerwerwerwer" };
            var s2 = new[] { "dddddd", "dfdfdfdf", "rtertrtewrter" };
            List<int> res;
          if (ArraysEqual(s1, s2, out res))
            foreach (var re in res)
            {
                Console.WriteLine(re);
            }
        }

       
        static bool ArraysEqual<T>(T[] a1, T[] a2,out List<int> res)
        {
            res = new List<int>();
            if (ReferenceEquals(a1, a2)) return true;
            if (a1 == null || a2 == null) return false;
            if (a1.Length != a2.Length) return false;
            var comparer = EqualityComparer<T>.Default;
            for (int i = 0; i < a1.Length; i++)
            {
                if (!comparer.Equals(a1[i], a2[i]))
                {
                    res.Add(i+1);//для удобности лохоюзера
                }
            }
            return res.Any();
        }
...
Рейтинг: 0 / 0
30.10.2013, 15:17
    #38446816
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Belavikdenis_stellпропущено...


не подскажете, чем плох вариант с массивом?именно списком делать?
Хоть и не мне. Если нет задачи реализовать с помощью массива, то конечно списки. Получится избежать много ошибок и код заметно станет красивее и меньше


можно и вам. сможете показать Как лучше сделать?
...
Рейтинг: 0 / 0
30.10.2013, 15:18
    #38446821
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stellBelavikпропущено...

Тогда тебе надо два цикла (по твоей реализации). Но если воспользуешься List<>, то можно проще


честно скажу list<> не пользовался, можно примерчиком, как мне сделать?
В блокноте "накалякал" загрузку из файла
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
String filename = "C:\\test.txt";
List<String> strList;
if (File.Exists(filename))
{
	strList = new List<string>(File.ReadAllLines(filename));
}
else
{
	//Ошибка
}


не проверял
...
Рейтинг: 0 / 0
30.10.2013, 15:27
    #38446846
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
ой ошибся во время перекура, найдите котэ ошибку ))
...
Рейтинг: 0 / 0
30.10.2013, 16:03
    #38446944
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Где-то в степиой ошибся во время перекура, найдите котэ ошибку ))
Два варианта. Или не в ту ветку запостил или перепутал string с int
...
Рейтинг: 0 / 0
30.10.2013, 16:25
    #38446991
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Belavik,
i+1 и return res.Any()
i+1 не врубился в та, показалось что строки для пользователя надо в виде индексов, хотя можно снаружи добавить.
и так
сравниваем два массива
если они указывают на один и тот же равны
если у них разная длина не равны
хотя можно пройтись за enumerablesequenceequal
сравниваем по содержанию итемов
если итемы не равны наполняем лист ошибок,
если лист ошибок не пустой не равны ? равны
а имея лист снаружи можно вытащить из каждого массива не верные строки по индексу....
...
Рейтинг: 0 / 0
30.10.2013, 17:05
    #38447092
Belavik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Где-то в степиBelavik,
i+1 и return res.Any()
i+1 не врубился в та, показалось что строки для пользователя надо в виде индексов, хотя можно снаружи добавить.
и так
сравниваем два массива
если они указывают на один и тот же равны
если у них разная длина не равны
хотя можно пройтись за enumerablesequenceequal
сравниваем по содержанию итемов
если итемы не равны наполняем лист ошибок,
если лист ошибок не пустой не равны ? равны
а имея лист снаружи можно вытащить из каждого массива не верные строки по индексу....
Я в твой код не вникал, но мне кажется там "много слов". Чтобы вывести список строк, имеющихся в обоих списках, можно проще
...
Рейтинг: 0 / 0
01.11.2013, 15:36
    #38450114
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Всем спасибо.
Я понял, буду дальше разбираться
...
Рейтинг: 0 / 0
02.11.2013, 00:30
    #38450676
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
denis_stell,
авторсравнить 2 массива - это одно
автор если из первого массива нашли вхождение во втором пересечение множеств - другое
автор2 csv файла - ....... - это вам надо гуглить - diff - через поток, есть много обыгрышей этой утилиты в C#
...
Рейтинг: 0 / 0
02.11.2013, 14:40
    #38450828
denis_stell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
классы,массивы
Где-то в степиdenis_stell,
авторсравнить 2 массива - это одно
автор если из первого массива нашли вхождение во втором пересечение множеств - другое
автор2 csv файла - ....... - это вам надо гуглить - diff - через поток, есть много обыгрышей этой утилиты в C#


Спасибо, буду гуглить.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / классы,массивы / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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