应用小算法

最近在做一个WPF小项目,因为需要处理一些数据,迫不得已写了一个函数,算是一个小算法吧,在此写出以便温故知新,同时希望牛人不吝赐教,点出其中不足之处。

简化需求:

创建一个datatable表dt,dt表中的记录行数是变量m。创建datatable表dt1、dt2,dt1和dt2循环显示dt中的数据,添加一个计时器定时刷新dt1、dt2中的数据,且dt1和dt2每次只能显示n行。

1、声明变量

private DispatcherTimer timer;
        DataTable dt = new DataTable();
        DataTable dt1 = new DataTable();
        DataTable dt2 = new DataTable();
        public static int currentRows = 0;//当前行
        public static int currentRows2 = 0;//中间变量

定时器:

timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0, 0, 5);
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();

2、添加控件,此处添加两个datagrid控件(用以显示dt1和dt2中的数据)

<DataGrid AutoGenerateColumns="False" Height="335" HorizontalAlignment="Left" Margin="220,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" >
            <DataGrid.Columns >
                <DataGridTextColumn Header="id" Binding="{Binding Path=id}"></DataGridTextColumn>
                <DataGridTextColumn Header="name" Binding="{Binding Path=name}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
        <DataGrid AutoGenerateColumns="False" Height="305" HorizontalAlignment="Left" Margin="463,31,0,0" Name="dataGrid2" VerticalAlignment="Top" Width="200" >
            <DataGrid.Columns >
                <DataGridTextColumn Header="id" Binding="{Binding Path=id}"></DataGridTextColumn>
                <DataGridTextColumn Header="name" Binding="{Binding Path=name}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

3、创建datatable表dt,并且初始化dt1和dt2

private void Initialize(int num)
        {
            dt.Columns.Add(new DataColumn("id", typeof(int)));
            dt.Columns.Add(new DataColumn("name", typeof(string)));
            for (int i = 0; i < num; i++)
            {
                DataRow dr = dt.NewRow();
                dr["id"] = i;
                dr["name"] = "tom" + i.ToString();
                dt.Rows.Add(dr);
            }

            dt1.Columns.Add(new DataColumn("id", typeof(int)));
            dt1.Columns.Add(new DataColumn("name", typeof(string)));

            dt2.Columns.Add(new DataColumn("id", typeof(int)));
            dt2.Columns.Add(new DataColumn("name", typeof(string)));
        }

初始化时调用:

Initialize(11);

4、编写函数

public void Update(int num)
        {
            int rows = dt.Rows.Count;
            int num1 = 0;
            int num2 = 0;
            currentRows = currentRows2;

            for (int i = currentRows; i < (currentRows + num); i++)
            {
                num1++;
                currentRows2++;

                DataRow dr = dt1.NewRow();
                dr["id"] = Convert.ToInt32(dt.Rows[i][0].ToString());
                dr["name"] = dt.Rows[i][1].ToString();
                dt1.Rows.Add(dr);

                if (i == rows - 1)
                {
                    i = -1;
                    currentRows2 = 0;
                }

                if (num1 == num)
                {
                    break;
                }
            }

            currentRows = currentRows2;
            for (int i = currentRows; i < (currentRows + num); i++)
            {
                num2++;
                currentRows2++;

                DataRow dr = dt2.NewRow();
                dr["id"] = Convert.ToInt32(dt.Rows[i][0].ToString());
                dr["name"] = dt.Rows[i][1].ToString();
                dt2.Rows.Add(dr);

                if (i == rows - 1)
                {
                    i = -1;
                    currentRows2 = 0;
                }

                if (num2 == num)
                {
                    break;
                }
            }
        }

5、定时刷新dt1和dt2中的数据

void timer_Tick(object sender, EventArgs e)
        {
            dt1.Clear();
            dt2.Clear();
            Update(3);
            this.dataGrid1.ItemsSource = dt1.DefaultView;
            this.dataGrid2.ItemsSource = dt2.DefaultView;
        }
时间: 2024-10-11 18:39:43

应用小算法的相关文章

java每日小算法(27)

/* [程序27]  题目:求100之内的素数    */ package test; import java.util.Scanner; public class test { public static boolean prime(int number) { boolean flag = true; int mid = (int)Math.sqrt(number); for(int i = 2; i< mid+1; i++) { if(number % i == 0) { flag = fa

java每日小算法(4)

[程序4] 题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. package test; import java.util.ArrayList;

特殊的日子(2015年5月1日劳动节)纪念回归和新的征程,用LRU和LFU两个小算法原理和区别来抛砖引玉

很久没有写过新的博客了,原因有很多,冠冕堂皇的理由就是工作忙,生活忙,各种累,直白一点其实就是变懒了,所以没有写. 在沉寂了这么长一段时间过后,终于又要重新出发了,对于自己当前的状态,觉得首先要有所沉淀,然后就是要放空自己,唯有放空自己方能继续进步. 以后一段时间更新的博客内容主体是与Android Framework相关的疑难问题分析.机制实现的原理.源代码调用分析,然后伴有一些常用的小算法,语言特性,程序原理等. 今天就先介绍LRU和LFU这两个在Android的Framework以及App

循环圈小算法

小算法循环圈的公式:(n+1) % (maxN+1) 比如实现0到3的循环 0+1 %4 = 1 1+1 %4 = 2 2+1 %4 = 3 3+1 %4 = 0 比如实现1到3的循环 1+1 %4 = 2 2+1 %4 = 3 3+1 %4 = 1

大数据处理时的一种BitMap小算法

一种大数据外部排序(内存无法加载所有排序元素).去除重复元素.快速找到随机被删除元素的BitMap小算法,核心思想即通过将一个数作为下标(index)来索引一个bit表示一个数是否存在,排序时的时间复杂度为O(N),需要的额外空间的复杂度O(N/8),支持整个int范围(正负数都支持)的算法示例如下: char BitMask[] = {0x80 , 0x40 , 0x20 , 0x10 , 0x8 , 0x4 , 0x2 , 0x1}; int WriteNumberBitToByte(cha

小算法笔记

素数: 除 1 外只能被 1 和自身整除的数. 方法一: #include <stdio.h> #define N 1000 int num = 0; int prime(int n) { int i; if(n % 2 == 0) return (n == 2); if(n % 3 == 0) return (n == 3); if(n % 5 == 0) return (n == 5); for(i = 7; i*i <= n; ++i) if(n % i == 0) return

每天一个小算法(3)----倒序打印链表

这个比较简单,用栈.递归.倒转链表都可以实现,不再过多解释. 代码使用递归实现 1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 typedef struct Node 5 { 6 int data; 7 Node* next; 8 }Node, *List; 9 10 11 List createList(int num) //随机生成数字,构造链表 12 { 13 List aList

java每日小算法(10)

/*[程序10]  题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? */ package test; public class test { public static void main(String[] args) { // TODO Auto-generated method stub double high = 100.0; double jump = 0.0; double sum = 0.0; for(

每天一个小算法(2)----合并两个有序链表

每天一个小算法还是有点没时间,尽量抽出时间写一写. 今天是合并有序的链表,对单链表有点忘了,尤其是指针指来指去的,有点晕,幸好基础还算好,想了想还是能想回来. 代码使用随机数函数生成一个链表,然后对链表排序,最后合并链表并打印,删除链表的函数于算法无关紧要,所以未实现^_^. 在Linux/g++下编译运行成功. 合并思路:和合并数组有些类同,比较两个节点的元素大小然后将小的摘下来尾插到链表bList中,然后指针指向下一个节点,最后直接把非空的链表合并到bList的末尾. 1 #include

java每日小算法(3)

[程序3] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. package test; public class test { public static boolean daffodil(int num) { boolean flag