Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
1

Как сравнить списки?

23.01.2017, 13:40. Просмотров 323. Ответов 11
Метки нет (Все метки)

Имеются 2 списка
C#
1
2
 var spisokfile = new List<string>();
 var spisokpath = new List<string>();
как сравнить строки текста со вторым списком и если недостает каких то строк то заполнить их, типа

C#
1
2
3
4
5
6
if(spisokfile сверяем с spisokpath если равны то идем дальше если нет получаем недостающие)
{
}
else
{
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2017, 13:40
Ответы с готовыми решениями:

Как сравнить списки?
Есть два списка, надо по условию их равенства выполнить некоторое действие....

Как сравнить изображения?
я так понимаю нужно использовать перцептивный хэш

Как сравнить два массива?
Доброго времени суток участникам форума. Недавно начал изучать C# и столкнулся...

Как сравнить разность дат?
Всем ку! Народ помогите, чет не пойму как сравнить разность дат? у меня...

Как сравнить массивы на идентичность
К примеру такой код: int a = { 1, 2, 3 }; int b = { 1, 2, 3 };...

11
bodynar
170 / 170 / 93
Регистрация: 14.03.2015
Сообщений: 687
Записей в блоге: 1
Завершенные тесты: 3
23.01.2017, 13:53 2
ArhangelSM, Можете воспользоваться linq

example from RU stackoverflow

C#
1
2
3
4
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };
 
IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);
0
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
23.01.2017, 13:59  [ТС] 3
bodynar, а как я в него строки из allfiles впихну

C#
1
2
3
4
5
6
7
8
  string[] allfiles = Directory.GetFiles("C:/Program Files/папка", "*", SearchOption.AllDirectories);
                        if (allfiles.Length == 0)
                            continue;
                        spisokpath.Clear();
                        for (int b = 0; b < allfiles.Length; b++)
                        {
                            spisokpath.Add(allfiles[b].Replace("/", ""));
                        }
0
Diamante
1309 / 1029 / 650
Регистрация: 14.08.2016
Сообщений: 3,569
Завершенные тесты: 1
23.01.2017, 14:05 4
bodynar, except() работает с последовательностями, если, вдруг, будут "повторы"(лист этого не запрещает) то они в результат попадут в единственном экземпляре
ArhangelSM, а в чем смысл сего действа? если после получения недостающих выполняется та же логика, что и при совпадении списков, то не проще ли делать копию "актуального" списка, или вообще ссылаться на один?
0
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
23.01.2017, 14:07  [ТС] 5
Diamante, мне надо проверить список с сервера и список полученный allfiles найти не достающие файлы и скачать
списки заполняю вот эти
C#
1
2
var spisokfile = new List<string>();
 var spisokpath = new List<string>();
и потом нужно сделать что написал выше
0
Pikemaster
299 / 299 / 215
Регистрация: 24.09.2013
Сообщений: 769
Завершенные тесты: 4
23.01.2017, 14:15 6
Если результирующий порядок элементов в списках не имеет значения и длина spisokfile всегда не меньше длины spisokpath, то можно сделать так:
C#
1
2
3
4
5
6
spisokfile.Sort();
spisokpath.Sort();
 
for (int i = 0; i < spisokfile.Count; i++)
    if (i >= spisokpath.Count || spisokpath[i] != spisokfile[i])
        spisokpath.Insert(i, spisokfile[i]);
0
Diamante
1309 / 1029 / 650
Регистрация: 14.08.2016
Сообщений: 3,569
Завершенные тесты: 1
23.01.2017, 14:16 7
ну тогда по логике вещей, повторений имен файлов быть не может, можно и через exept()
C#
1
var toDownload = mustHaveList.Except(existList).ToList();
дальше уже работать со списком, докачивать там или еще что..
0
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
23.01.2017, 14:23  [ТС] 8
Diamante, как я понимаю ваш вариант скачает просто все? если да то не вариант, мне нужны только не достающие

Добавлено через 4 минуты
Pikemaster, Я уже весь день в напряге, пытаюсь побороть, как ваш вариант впихнуть сюда
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
            if (arr[0].ToString() == fname) <--- если список не совпадает
                                {  
                                    if (arr[1].ToString() == result.ToString())
                                    {
                                       
                                        // MessageBox.Show("все ок: " + arr[0]);
                                    }
                                    else
                                    {
                                        тут качается если md5 файлов отличается
                                        string temp2;
                                        temp2 = Regex.Split(arr[0].ToString(), "KRISTA")[1];
 
                                        
                                        if (File.Exists(fname))
                                        {
                                            File.Delete(fname);
                                        }
                                        WebClient client = new WebClient();
                                
                                        client.DownloadFile(new Uri("http://Update_Launcher" + temp2), fname);
 
                                        MessageBox.Show("качать файл надо:" + arr[0]);
 
                                        //  MessageBox.Show(fi2.Directory.ToString());*/
                                    }
                                }
                            }
                            else
                            {
 
                               тут получить которые не достаю и скачать ниже
 
                                string temp2;
                                temp2 = Regex.Split(arr[0].ToString(), "ап")[1];
 
                               // Directory.CreateDirectory(arr[0].ToString());
 
                                MessageBox.Show("Скачать файл надо:" + arr[0]);
                                WebClient client = new WebClient();
                                client.DownloadFile(new Uri("http://Update_Launcher" + temp2), arr[0].ToString());
                            }
                        });
0
Diamante
1309 / 1029 / 650
Регистрация: 14.08.2016
Сообщений: 3,569
Завершенные тесты: 1
23.01.2017, 14:29 9
нет, мой вариант создает список того, что "должно быть" за вычетом того, что "уже есть"
0
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
23.01.2017, 14:48  [ТС] 10
Pikemaster, подскажите, как я понял это дополняет список spisokpath.Insert(i, spisokfile[i]); а мне надо не достающие в отдельный список spisoktemp
0
Pikemaster
299 / 299 / 215
Регистрация: 24.09.2013
Сообщений: 769
Завершенные тесты: 4
23.01.2017, 17:31 11
ArhangelSM, тогда так
C#
1
2
3
4
5
6
7
8
var spisoktemp = new List<string>();
 
spisokfile.Sort();
spisokpath.Sort();
 
for (int i = 0; i < spisokfile.Count; i++)
    if (i >= spisokpath.Count || spisokpath[i] != spisokfile[i])
        spisokpath.Add(spisokfile[i]);
Добавлено через 1 час 49 минут
C#
1
spisokpath.Add(spisokfile[i]);
Заменить нужно на
C#
1
spisoktemp.Add(spisokfile[i]);
Опечатка
1
ArhangelSM
14 / 14 / 3
Регистрация: 04.10.2010
Сообщений: 573
24.01.2017, 08:34  [ТС] 12
я догадался)
пошел другим путем и сделал вот так

C#
1
2
3
4
5
6
7
8
9
10
    for (int h = 0; h < spisokfile.Count; h++)
                            if (File.Exists(spisokfile[h]))
                            {
 
                            }
                            else
                            {
                     
                                
                            }
0
24.01.2017, 08:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2017, 08:34

Как сравнить 2 разнотипных значения
Как сравнить dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index) -...

Как сравнить две строки
Разработать метод, который в качестве исходных данных получает 2 строки...

Как сравнить два List<T>?
Есть класс public class DB { public string vopros { get; set; } ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru