C# 減少嵌套循環(huán)的兩種方法
當然,除了關(guān)注明顯的循環(huán)例如for、foreach,還應(yīng)該關(guān)注隱晦一點的循環(huán),例如datatable.select(),linq之類的list.where、list.find等。
要優(yōu)化,排除業(yè)務(wù)問題,要考慮的就是代碼技術(shù)了??吹窖h(huán)查找數(shù)據(jù),盡可能向Dictionary靠攏。
eg1:一個簡單的key對應(yīng)一條datarow
優(yōu)化前:
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DataTable table = new DataTable();
...
for (int i = 0; i < 1000000; i++)
{
var row = table.AsEnumerable().FirstOrDefault(r => r["num"].ToString() == i.ToString());
...
}
}
}
}
優(yōu)化后:
using System.Data;
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DataTable table = new DataTable();
...
var dict = table.AsEnumerable().ToDictionary(r => r["num"].ToString());
for (int i = 0; i < 1000000; i++)
{
if (dict.ContainsKey(i.ToString()))
{
var row = dict[i.ToString()];
}
...
}
}
}
}
eg2:一個拼裝的Key對應(yīng)多條DataRow的字典
優(yōu)化前:
using System.Data;
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DataTable table = new DataTable();
...
for (int i = 0; i < 1000000; i++)
{
var name = "";
...
var rows = table.AsEnumerable().Where(r => r["num"].ToString() == i.ToString() && r["name"].ToString() == name);
}
}
}
}
優(yōu)化后:
using System.Data;
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DataTable table = new DataTable();
var group = table.AsEnumerable().GroupBy(r => GetGroupKey(r["num"].ToString(), r["name"].ToString()));
var dict= group.ToDictionary(r=>r.Key);
...
for (int i = 0; i < 1000000; i++)
{
var name = "";
var key = GetGroupKey(i.ToString(), name);
if (dict.ContainsKey(key))
{
var rows = dict[key];
}
...
}
}
private static string GetGroupKey(string _num,string _name)
{
return $"num={_num}|name={_name}";
}
}
}
量變會引起質(zhì)變。
以上就是C# 減少嵌套循環(huán)的兩種方法的詳細內(nèi)容,更多關(guān)于C# 減少嵌套循環(huán)的資料請關(guān)注腳本之家其它相關(guān)文章!
- C#用鏈式方法表達循環(huán)嵌套
- C# 9.0新特性——擴展方法GetEnumerator支持foreach循環(huán)
- c# 循環(huán)語句的使用方法
- C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼
- C# 使用WPF 用MediaElement控件實現(xiàn)視頻循環(huán)播放
- c#中l(wèi)ist.FindAll與for循環(huán)的性能對比總結(jié)
- C#中foreach循環(huán)對比for循環(huán)的優(yōu)勢和劣勢
- 淺談C#中的for循環(huán)與foreach循環(huán)
- C# for循環(huán)的經(jīng)典案例集錦
- C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例
- C# winform循環(huán)播放多個視頻
- C#中for循環(huán)、while循環(huán)循環(huán)執(zhí)行的方法
- C#使用foreach循環(huán)遍歷數(shù)組完整實例
相關(guān)文章
C# InitializeComponent()方法案例詳解
這篇文章主要介紹了C# InitializeComponent()方法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法,簡單分析了C#針對SQLite數(shù)據(jù)庫的讀寫及顯示等操作相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-07-07

