当前位置:编程学习 > C#/ASP.NET >>

请各位高手帮忙解决一个求和函数问题,在线等,十分着急!请各位前辈指点!


[align=left]有表格如下图,切表格中的数据均都为数字,除第一列为汉字之外,
如何写个函数可以使每行每列的数据相加,如下图最后一行为上数
字之和,
如何能写个活函数,就是可以计算第一行到第三行的数据的和
也可以计算第三行到第五行的和,也可以计算第二行到第五行
的数据的和!



-------------------------------------------
| 200 | 100 | 200 | 300 | 400 | 200 | 100 |第一行
-------------------------------------------
| 200 | 100 | 200 | 300 | 400 | 200 | 100 |第二行
-------------------------------------------
| 200 | 100 | 200 | 300 | 400 | 200 | 100 |第三行
-------------------------------------------
| 200 | 100 | 200 | 300 | 400 | 200 | 100 |第四行
-------------------------------------------
| 200 | 100 | 200 | 300 | 400 | 200 | 100 |第五行
-------------------------------------------
|1000 | 500 |1000 |1500 |2000 |1000 | 500 |第六行 和行,
-------------------------------------------[/align] --------------------编程问答-------------------- 用数组不就行了吗??! --------------------编程问答-------------------- 我也知道用数组啊!老大!可是,我不知道如何下手啊!
还请前辈多多指点!写个例子或是详细说下思路!谢谢! --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 1,数组,建个二维数组,根据行列参数循环求和
2,放到数据库里用求和函数求和 --------------------编程问答-------------------- 简单写了一个给你参考一下!  
 int[][] abc;
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                abc[i][j] = j + 1;
            }
        }
        int i=0;
        i = 1;//这个i表示要计算的初行即多少行到多少最后的行如果想控制多少行到多少行的话,你还可以设置一个新的变量用来存到结束的行;后面只要把 for (i; i < 结束的行的变量就行了; i++)
        int[] abcd;
        for (i; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                abcd[j] += abc[i][j];//abcd这个数组即为你求合的数组了,这个就是求完合的内容,显示出来就OK了!
            }
        } --------------------编程问答-------------------- 求求大家写个例子出来啦!我比较笨点!前辈的几句话,我基本上要思考个三四天啊!
拜托了各位!? --------------------编程问答-------------------- 这个不难的啊,我来写个给你 --------------------编程问答-------------------- 把表抽象化:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;

namespace Plus
{
    //对表的抽象
    class TableToPlus
    {
        List<int>[] columns;

        //构造表,columns是List<int>的数组,一个List<int>对象代表表的一列
        public TableToPlus(params List<int>[] columns)
        {
            this.columns = columns;
            int length = columns[0].Count;
            foreach (var list in columns)
            {
                if (length != list.Count)
                    throw new System.Exception("列的长度不一致");
            }

        }

        /// <summary>
        /// 功能:对表指定任意数量的行"迭加”
        /// </summary>
        /// <param name="rowIndexs">包含了所有需要"迭加”的行的索引的数组</param>
        /// <returns>顺序存放"迭加”结果的行的数据</returns>
        public IEnumerable<int> RowAccumulator(params int[] rowIndexs)
        {
            if (rowIndexs != null)
            {
                var selector = columns.Select(list => list.Where((element, index) => rowIndexs.Contains(index)));
                List<int> result = new List<int>();
                foreach (var subList in selector)
                {
                    result.Add(subList.Aggregate(0, (fore, next) => fore + next));
                }
                return result;
            }
            else
                return null;
        }

        /// <summary>
        /// 该重载实现对指定的区间的所有行"迭加”
        /// </summary>
        /// <param name="startIndex">需要"迭加”的第一行</param>
        /// <param name="endIndex">需要"迭加”的最后一行</param>
        /// <returns>>顺序存放"迭加”结果的行的数据</returns>
        public IEnumerable<int> RowAccumulator(int startIndex, int endIndex)
        {
            if (startIndex > endIndex)
                throw new System.Exception("注意参数顺序");
            var selector = columns.Select(list => list.Skip(startIndex).Take(endIndex - startIndex + 1));
            List<int> result = new List<int>();
            foreach (var list in selector)
            {
                result.Add(Convert.ToInt32(list.Sum(p => p)));
            }
            return result;
        }

    }

}
--------------------编程问答-------------------- 使用方法测试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;

namespace Plus
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化表
            TableToPlus table = new TableToPlus(new List<int>[]{
                new List<int>{200,200,200,200,200}, //第一列
                new List<int>{100,100,100,100,100}, //第二列
                new List<int>{200,200,200,200,200}, //第三列
                new List<int>{300,300,300,300,300}, //第四列
                new List<int>{400,400,400,400,400}, //第五列
                new List<int>{200,200,200,200,200}, //第六列
                new List<int>{100,100,100,100,100}
                //.....
                //还有其他列就在这里加,增加行数可以通过同时增加List<int>长度得到
            });

            int[] array = { 1, 3, 4 };  //表的第二行,第四行,第5行迭加
            IEnumerable<int> result = table.RowAccumulator(array);
            foreach (var val in result)
            {
                Console.Write(val + "\t");
            }
            Console.WriteLine();

            var resultSet = table.RowAccumulator(0, 5);
            Console.WriteLine("------------------------------------");
            foreach (var val in resultSet)
            {
                Console.Write(val + "\t");
            }
        }
    }
}

--------------------编程问答-------------------- 帮顶下 --------------------编程问答-------------------- 如果是从数据库里面取数据,就用不着这么麻烦了,直接用COMPUTE子句汇总就行了:

SELECT t1,t2,....
FROM table
ORDER BY t1
COMPUTE SUM(t1), SUM(t1)

然后绑定数据源到页面就可以了 --------------------编程问答-------------------- 和行值的话就把几列加起来:


SELECT t1,t2,....,sum(t1+t2+...)
FROM table
ORDER BY t1
COMPUTE SUM(t1), SUM(t2),...,sum(t1+t2+...)
--------------------编程问答-------------------- 为什么一定要别人写给你呢?你可以自己通过理解尝试着写出来啊
1、你绑定数据以后在DataItemBound里面进行数组的纪录;
2、在列表底部进行统计;
3、编写独立的计算统计函数; --------------------编程问答--------------------  谢谢各位前辈!只因我是采鸟.不知道任何下手啊!
--------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 在客户端用js来统计得了....
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,