C#-实现对版本号的自动排序
前提是版本号都是Vxx.xx.xx.xx....的格式,xx代表数字,不能有除V以外其他字母
记录两种比较方法,一种是vs自带的Version类,一种是自己写的,根据比较结果,使用冒泡排序进行排序。
先给出一堆乱序的版本号:
List<string> verList;
private void InitVersion()
{
verList = new List<string>();
verList.Add("V1.2.32.1");
verList.Add("V1.2.2.12");
verList.Add("V1.4.3.2");
verList.Add("V1.1.33.21");
verList.Add("V1.0.3.2");
verList.Add("V1.2.6.14");
verList.Add("V1.3.3.2");
verList.Add("V1.1.4.2");
}
【Version方式】使用冒泡排序进行排序:
private void SortVersion()
{
for (int i = 0; i < verList.Count - 1; i++)
{
for (int j = 0; j < verList.Count - 1 - i; j++)
{
Version v1 = new Version(verList[j].Replace("V", ""));
Version v2 = new Version(verList[j + 1].Replace("V", ""));
if (v1.CompareTo(v2) > 0)
{
string temp = verList[j];
verList[j] = verList[j + 1];
verList[j + 1] = temp;
}
}
}
}
【自己写的方法】比较两个版本大小,返回判断结果:
private bool IsV2UpToV1(string v1, string v2)
{
string[] str1 = v1.Replace("V", "").Split('.');
string[] str2 = v2.Replace("V", "").Split('.');
bool isHigh = false;
for (int j = 0; j < Math.Max(str1.Length, str2.Length); j++)
{
if (str2.Length <= j)
break;
if (str1.Length <= j )
{
isHigh = true;
break;
}
if (Convert.ToInt16(str2[j]) == Convert.ToInt16(str1[j]))
continue;
isHigh = Convert.ToInt16(str2[j]) > Convert.ToInt16(str1[j]);
break;
}
return isHigh;
}
使用冒泡排序进行排序:
private void SortVersion()
{
for (int i = 0; i < verList.Count - 1; i++)
{
for (int j = 0; j < verList.Count - 1 - i; j++)
{
if (!IsV2UpToV1(verList[j], verList[j + 1]))
{
string temp = verList[j];
verList[j] = verList[j + 1];
verList[j + 1] = temp;
}
}
}
}
运行程序:
