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

求大家帮忙把这段代码的排序方式改一下。。。

目前排序的时间超过3S 想改到3S一下 据说可以先把数据取出来放入一个集合中 不过在下实在不会改了。。


//从数据库服务器上获取当天设备加工参数信息
                for (int i = 0; i < listturn.Count; i++)
                {
                    itmHandleClient = 1234;
                    KepItem = KepItems.AddItem(listturn[i].ToString(), itmHandleClient);
                    itmHandleServer = KepItem.ServerHandle;
                }

 //排序
                string[] values = new string[262];

                for (int i = 0; i < 262; i++)
                {
                    string itemID = "EA211.AF999.DB" + i.ToString();
                    foreach (OPCItem item in KepItems)
                    {
                        if (itemID == item.ItemID)
                        {
                            if (item.Value != null)
                            {
                                values[i] = item.Value.ToString();
                            }
                        }
                    }
                } 排序 C# .NET 循环 --------------------编程问答-------------------- 你这哪叫排序,就是个查找对应,你要想节约时间,就要对两个循环加以改进,比如KepItems先排序,这样KepItems就是有序的了,那么for循环中就不需要每次都从KepItems的开始遍历了,记录当前索引,下一次遍历从该索引处开始 --------------------编程问答-------------------- 这是排序? --------------------编程问答-------------------- for (int i = 0; i < 262; i++)
                {
                    string itemID = "EA211.AF999.DB" + i.ToString();
                    foreach (OPCItem item in KepItems)
                    {
                        if (itemID == item.ItemID)
                        {
                            if (item.Value != null)
                            {
                                values[i] = item.Value.ToString();
                            }
                            break;
                        }
                    }
                } 

用linq的
var query = list.OrderBy(t => int.Parse(t.ItemID.Substring("EA211.AF999.DB".Length))).Select(t=>t.Value); --------------------编程问答--------------------  for (int i = 0; i < 262; i++)
                {
                    string itemID = "EA211.AF999.DB" + i;
                    foreach (int j=KepItems.Length-1;j>=0;j-- )
                    {  
                        OPCItem item=KepItems[j];
                        if (itemID == item.ItemID&&item.Value != null)
                        {
                                values[i] = item.Value.ToString();
                                break;
                        }
                    }
                } --------------------编程问答-------------------- 在下刚入门 如果不是排序也请前辈们帮一下解决办法- - --------------------编程问答-------------------- KepItems换成Dictionary --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
你这哪叫排序,就是个查找对应,你要想节约时间,就要对两个循环加以改进,比如KepItems先排序,这样KepItems就是有序的了,那么for循环中就不需要每次都从KepItems的开始遍历了,记录当前索引,下一次遍历从该索引处开始


求具体的编写方法.... --------------------编程问答--------------------
引用 4 楼 hjywyj 的回复:
for (int i = 0; i < 262; i++)
                {
                    string itemID = "EA211.AF999.DB" + i;
                    foreach (int j=KepItems.Length-1;j>=0;j-- )
            ……


这样的话会报错....也许是我更改的不对 麻烦再看看 在下在这个领域实在是刚入门很懂不懂的地反- - --------------------编程问答--------------------
引用 6 楼 ssp2009 的回复:
KepItems换成Dictionary

不明白。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,