由于开发需要对树进行层序遍历,琢磨了好几天都没有进展,原来是因为我还不知道居然有个队列集合!茅塞顿开,仅供参考!
private void button6_Click(object sender, EventArgs e)
{
List<string> test = new List<string> { "1", "2", "9", "2.1", "9.5", "10", "1.1", "1.1.2", "1.1.1", "8", "9.6" ,"1.1.10"};
string tt;
StringComparator stringComparator = new StringComparator();
for (int i = 0; i < test.Count; i++)
{
for (int j = i+1; j < test.Count; j++)
{
if (stringComparator.Compare(test[i],test[j])==1)
{
tt = test[i];
test[i] = test[j];
test[j] = tt;
}
}
}
}
#region 序号排序
#endregion
}
}
public class StringComparator : IComparer<string>
{
private int toLeft = -1;
private int toRight = 1;
public int Compare(string str1, string str2)
{
string[] str1Split = str1.Split('.');
string[] str2Split = str2.Split('.');
int minSplitlength;
if (str1Split.Length > str2Split.Length)
{
minSplitlength = str2Split.Length;
}
else
{
minSplitlength = str1Split.Length;
}
for (int i = 0; i < minSplitlength; i++)
{
int strToInt1 = int.Parse(str1Split[i]);
int strToInt2 = int.Parse(str2Split[i]);
int compareResult = strToInt1.CompareTo(strToInt2);
if (compareResult == 0)
{
continue;
}
else if (compareResult > 0)
{
return toRight;
}
else
{
return toLeft;
}
}
if (minSplitlength == str1Split.Length)
{
return toLeft;
}
else
{
return toRight;
}
}
}