查看: 492|回复: 0

[ASP.NET教程] C#类似版本号有多个分割符可以产生的排列组合,类似版本号比较

发表于 2018-4-25 08:00:02

我采用asp.net进行演示

送给有缘人吧,可以获得类似版本号的功能,也可以对比两个版本号,我这里是其他需要用逗号分割的

  1. using System;
  2. public partial class _Default : System.Web.UI.Page
  3. {
  4. protected void Page_Load(object sender, EventArgs e)
  5. {
  6. var b = Request.QueryString["b"];
  7. if (string.IsNullOrEmpty(b))
  8. {
  9. b = "0,3,5";
  10. }
  11. var a = b;//GetNewBb("2,3,5", b);//没有解决低位重新计算
  12. while (a != "2,3,5")
  13. {
  14. b = a;
  15. a = GetNewVersion("2,3,5", b);
  16. Response.Write(a + "<br />");
  17. }
  18. }
  19. private string GetNewVersion(string max, string current,char separator=',')
  20. {
  21. var a = max.Split(separator);//分割字符
  22. var b = current.Split(separator);//分割字符2
  23. var flag = true;//设第一个大
  24. for (int i = a.Length - 1; i > 0; i--)
  25. {
  26. if (int.Parse(b[i]) < int.Parse(a[i]))
  27. {
  28. b[i] = (int.Parse(b[i]) + 1).ToString();
  29. break;
  30. }
  31. if (i - 1 >= 0&& int.Parse(b[i-1]) < int.Parse(a[i-1]))
  32. {
  33. for (var j = i; j < a.Length; j++)
  34. {
  35. b[j] = "0";
  36. }
  37. b[i-1] = (int.Parse(b[i-1]) + 1).ToString();
  38. break;
  39. }
  40. }
  41. for (int k = 0; k < a.Length-1; k++)
  42. {
  43. if (int.Parse(a[k]) < int.Parse(b[k]))
  44. {
  45. flag = false;//说明current是大的如果比较大小,改返回为bool,最后return flag即可
  46. break;
  47. }
  48. }
  49. return string.Join(",", b);
  50. }
  51. }
复制代码



回复

使用道具 举报