Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
9 / 9 / 1
Регистрация: 28.02.2013
Сообщений: 208
1

Алгоритм сравнения версий в формате "х.х.х"

18.02.2015, 21:05. Показов 1953. Ответов 3
Метки нет (Все метки)

Добрый день! У меня есть список(List<string>) с версиями:
"0.9.6"
"0.9.5"

Нужно оттуда достать самую последнюю версию.
Сразу я недолго думая сделал так:
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
public static string GetGameVersion()
        {
            try
            {
                List<string> directories = new List<string>(Directory.GetDirectories(WoTPath.GameFolderName + "\\res_mods"));
                List<int> versions = new List<int>();
                foreach (string directory in directories)
                {
                    int vers = 0;
                    int.TryParse(Path.GetFileName(directory).Replace(".", ""), out vers);
                    versions.Add(vers);
                }
 
                if (versions.Count == 0)
                {
                    new Log("versions.Count == 0. Returned 0.9.6, GetGameVersion()");
                    return "0.9.6";
                }
 
 
                int maxI = 0;
                for (int i = 0; i < versions.Count; i++)
                {
                    if (versions[i] > versions[maxI])
                        maxI = i;
                }
 
                return Path.GetFileName(directories[maxI]);
            }
            catch (Exception e)
            {
                new Log(e.Message + Environment.NewLine + "class Sound, method GetGameVersion");
                return "0.9.6";
            }
        }
Все прекрасно работает, пока я не протестировал на человеке, у которого есть 0.8.11
Кто может предложить простую логику, которая будет понимать, что 0.8.11 < 0.9.6 в отличии от моей?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2015, 21:05
Ответы с готовыми решениями:

Дан массив строк: "red", "green", "black", "white", "blue". Запишите в файл элементы массива построчно (в новой строке)
пишу так но не помогает: static void Main(string args) { string...

Как из цифры в формате текста "1000000" сделать "1 000 000"?
Лейбл получает decimal цифры-цены, которые трудно читать юзеру без группировки по 3 знака. Что...

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля:...

Построить иерархию классов "Студент", "преподаватель", "персона", "заведующий кафедрой"
Построить иерархию классов: Студент, преподаватель, персона, заведующий кафедрой 1) Разработать...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
3
1266 / 967 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
18.02.2015, 21:09 2
Лучший ответ Сообщение было отмечено goremukin как решение

Решение

Цитата Сообщение от goremukin Посмотреть сообщение
Сразу я недолго думая сделал так:
а надо было всего лишь начать писать в среде vers...и вылезла бы подсказка:
C#
1
System.Version
1
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
18.02.2015, 21:23 3
Цитата Сообщение от goremukin Посмотреть сообщение
которая будет понимать, что 0.8.11 < 0.9.6 в отличии от моей?
Если формат записи версий строго соблюдается(цифра, точка, цифра, точка, две цифры), то можно вот так.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace GetVersion {
    class Program {
        static void Main(string[] args) {
            List<string> versions = new List<string> {
                "0.8.11",
                "0.2.12",
                "0.9.06"
            };
            string ver = GetMaxVersion(versions);
            Console.WriteLine(ver);
            Console.ReadLine();
        }
        static string GetMaxVersion(List<string> versions) {
            string ver = versions.OrderBy(v => int.Parse(v.Substring(0, 1)))
                .OrderBy(v => int.Parse(v.Substring(2, 1)))
                .OrderBy(v => int.Parse(v.Substring(4, 2))).First();
            return ver;
        }
    }
}
1
9 / 9 / 1
Регистрация: 28.02.2013
Сообщений: 208
18.02.2015, 21:26  [ТС] 4
Цитата Сообщение от m0nax Посмотреть сообщение
а надо было всего лишь
Красава! Не знал про этот божий класс.
Сразу расстроился, что TryParse выдает null, если не может преобразовать, и будет exception при
C#
1
if (versions[i] > versions[maxI])
А он все прекрасно делает без всяких танцов. Спасибо большое, +1!

Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
Если формат записи версий строго соблюдается
Не, не соблюдается. Я эту ошибку и заметил, когда 0.8.11 посчиталось больше, чем 0.9.6
Я просто в своем коде int заменил на Version и все отлично работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2015, 21:26

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Проблема при сравнении: "Оператор ">" не может применяться к операндам типа "Т" и "Т""
Добрый день , пишу сортировку , все делаю на основе Т , но вот в чем проблемма public class...

Методом вычислить тип треугольника: "не существует", "тупоугольный", "прямоугольный", "остроугольный"
Помогите пожалуйста С помощью метода вычислить тип треугольника::cry: 1) если первый параметр...

Напишите программу, которая подсчитывает, сколько учащихся получило "2", "3", "4" и "5"
Помогите, пожалуйста, с решением следующей задачи: учащиеся сдают экзамены по нескольким...

Составить программу по управлению манипулятором "мышь". Выбор типа курсора организовать по нажатию на клавиши "q","w","r
Составить программу по управлению манипулятором &quot;мышь&quot;. Выбор типа курсора организовать по нажатию...


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

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

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