关于VBA的问题 有点冷门 进来看看 现在有一个excel工作表 有5行5列的内容 然后对某一列进行排序 我在程序里如何才能知道他已经排列了,派的是降序还是升序 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ……确实冷门。思路:准备一个枚举:enum Directions{UnKnown, Asc, Desc};设置一个方向变量 Direction direction = Direction.Unknown;对该列的值进行遍历和比较。对前2个Cell的值,如果Cell[1]>Cell[0],则direction=Direction.Asc,如果后一个Cell值均一直大于前一个Cell值,则direction不会变,最后可确定是升序。如果Cell[1]<Cell[0],则为direction=Direction.Desc,如果后一个Cell值均一直小于前一个Cell值,则direction不会变,最后可确定是降序。期间,如果出现相反的比较结果。则说明未排过序整个方法类似 电梯的一种调度算法。 模拟代码如下,应该还能再优化。public static void Main(string[] args){ //testdouble(); int[] source1 = new int[] { 1, 3, 5, 6, 8 }; int[] source2 = new int[] { 8, 6, 5, 2, 0 }; int[] source3 = new int[] { 1, 3, 5, 6, 4 }; Console.WriteLine("Array 1 sorted by: {0}", evelator(source1)); Console.WriteLine("Array 2 sorted by: {0}", evelator(source2)); Console.WriteLine("Array 3 sorted by: {0}", evelator(source3));}public enum Directions { Unknown, Asc, Desc };public static Directions evelator(int[] source){ Directions dir = (source[1] >= source[0]) ? Directions.Asc : Directions.Desc; for (int i = 2, prev = source[1]; i < source.Length; i++) { Directions tempdir = Directions.Unknown; if (source[i] >= prev) tempdir = Directions.Asc; else tempdir = Directions.Desc; if (tempdir != dir) { dir = Directions.Unknown; break; } prev = source[i]; } return dir;}结果:Array 1 sorted by: AscArray 2 sorted by: DescArray 3 sorted by: Unknown 非泛型集合ArrayList和泛型集合List,运行时间问题 gridview添加列问题 我想做一个SQL视图,请大家帮忙。 这是为啥呢。 如何设置子窗体和主窗体的大小一样 存储过程参数为空或参数个数不固定的问题 报表传值,但有点不同 如何取得指定IP地址的机器名 DataGrid中记录有没有单击事件 c#初学,调用c的dll 如何让一个类保持状态? formview进入编辑模式修改或添加,得到的值还是以前的
准备一个枚举:enum Directions{UnKnown, Asc, Desc};
设置一个方向变量 Direction direction = Direction.Unknown;
对该列的值进行遍历和比较。
对前2个Cell的值,如果Cell[1]>Cell[0],则direction=Direction.Asc,如果后一个Cell值均一直大于前一个Cell值,则direction不会变,最后可确定是升序。
如果Cell[1]<Cell[0],则为direction=Direction.Desc,如果后一个Cell值均一直小于前一个Cell值,则direction不会变,最后可确定是降序。
期间,如果出现相反的比较结果。则说明未排过序整个方法类似 电梯的一种调度算法。
public static void Main(string[] args)
{
//testdouble();
int[] source1 = new int[] { 1, 3, 5, 6, 8 };
int[] source2 = new int[] { 8, 6, 5, 2, 0 };
int[] source3 = new int[] { 1, 3, 5, 6, 4 }; Console.WriteLine("Array 1 sorted by: {0}", evelator(source1));
Console.WriteLine("Array 2 sorted by: {0}", evelator(source2));
Console.WriteLine("Array 3 sorted by: {0}", evelator(source3));
}public enum Directions { Unknown, Asc, Desc };
public static Directions evelator(int[] source)
{
Directions dir = (source[1] >= source[0]) ? Directions.Asc : Directions.Desc; for (int i = 2, prev = source[1]; i < source.Length; i++)
{
Directions tempdir = Directions.Unknown; if (source[i] >= prev)
tempdir = Directions.Asc;
else
tempdir = Directions.Desc; if (tempdir != dir)
{
dir = Directions.Unknown;
break;
} prev = source[i];
} return dir;
}
结果:
Array 1 sorted by: Asc
Array 2 sorted by: Desc
Array 3 sorted by: Unknown