首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算差异和存储?

如何计算差异和存储?
EN

Stack Overflow用户
提问于 2015-05-01 10:42:58
回答 3查看 86关注 0票数 0

我想要计算变量中的差异存储。

示例DB:

代码语言:javascript
复制
Id   RS
--   --
1    10
2    25
3    33
4    44
.    .
.    .

我想要计算1&2,2&3,3&4 (ID)之间的差额,我必须将总数存储到一个变量中。(25-10 = 15, 33-25=8, 44-33=11),输出应该是34。我被困在下面的代码中。

代码:

代码语言:javascript
复制
protected void btnSubmit_Click(object sender, EventArgs e)
{
   RsTableAdapters.tbl_RS_detailsTableAdapter sd;
   sd = new RsTableAdapters.tbl_RS_detailsTableAdapter();
   DataTable dt = new DataTable();     
   dt = sd.GetData();
   foreach (DataRow row in dt.Rows)
     {                
         string rsValue = (row["RS"].ToString()); // here getting first value (10)
     }
}
EN

回答 3

Stack Overflow用户

发布于 2015-05-01 10:50:24

您可以使用linq:

代码语言:javascript
复制
var differences = from row1 in dt.Rows
join row2 in dt.Rows on (int)row1["ID"] equals (int) row2["ID"] + 1
select (int)row2["RS"] - (int)row1["RS"];
var sumofdiffs = differences.Sum();

只要"RS“和"ID”是整数,如果不是,您应该先解析它。这种方法不需要按ID排序的元素,它的缺点是复杂度O(n^2),支持简单性。

编辑:正如所指出的那样,复杂度可能比O(n^2)还要好,如果linq能够在相等的条件下使用散列,它可以比准备排序数据O(n log )更简单地摊销O(n)。

票数 2
EN

Stack Overflow用户

发布于 2015-05-01 10:49:08

尝试如下:它记住前一行的值,以计算除第一行外的每一行的差和和。

代码语言:javascript
复制
 int sum = 0;
 int diff;
 bool first = true;
 int oldValue;
 foreach (DataRow row in dt.Rows)
 {                
     int value = row["RS"];
     if(!first)
     { 
         diff = value - oldValue;
         sum += diff;
         first = false;
     }
     oldValue = value;
 }

您必须确保返回的数据在ID上进行排序,才能完成此工作。

票数 1
EN

Stack Overflow用户

发布于 2015-05-01 10:54:44

你可以试试这样的方法:

代码语言:javascript
复制
var drs = dt.Rows.Cast<DataRow>()
int last = (int)drs.Last()["RS]
int first = (int)drs.First()["RS"]
int diff = last - first

正如其他人所说的,您需要按ID对数据进行排序。

代码语言:javascript
复制
Select RS from tbl_RS_details order by ID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29985478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档