我没有问任何问题,只想向您展示使用System.Collections.Generic和System.Collections.Generic.List {T}之间的区别。
假设我们有以下代码。
using System.Collections.Generic;
var text = this.FileRawText;
var tuples = new List<(int, int)>();
List<(int, int)> starts = new List<(int, int)>(), ends = new List<(int, int)>();
for (int row = 0; row < text.Count; row++)
for (int col = 0; col < text[row].Length; col++)
if (text[row][col] == LeftBrace)
starts.Add((row + 1, col));
else if (text[row][col] == RightBrace)
ends.Add((row + 1, col));
for (int i = 0; i < starts.Count; i++)
for (int j = 0; j < ends.Count; j++)
if (starts[i].Item2 == ends[j].Item2)
if (!tuples.Contains((starts[i].Item1, ends[i].Item1)))
tuples.Add((starts[i].Item1, ends[j].Item1));
var visited = new List<int>();
var _new = new List<Tuple<int, int>>();
foreach (var item in tuples)
if (!visited.Contains(item.Item1) && !visited.Contains(item.Item2))
{
_new.Add(new Tuple<int, int>(item.Item1, item.Item2));
visited.Add(item.Item1);
visited.Add(item.Item2);
}
return _new;
此代码对using System.Collections.Generic使用多个引用,因此,该代码执行大约5秒钟(对于具有2200行文本的文件)。
这使代码非常慢,因此我决定删除该命名空间的using指令。代码更改为:
var text = this.FileRawText;
var tuples = new System.Collections.Generic.List<(int, int)>();
System.Collections.Generic.List<(int, int)> starts = new System.Collections.Generic.List<(int, int)>(),
ends = new System.Collections.Generic.List<(int, int)>();
for (int row = 0; row < text.Count; row++)
for (int col = 0; col < text[row].Length; col++)
if (text[row][col] == LeftBrace)
starts.Add((row + 1, col));
else if (text[row][col] == RightBrace)
ends.Add((row + 1, col));
for (int i = 0; i < starts.Count; i++)
for (int j = 0; j < ends.Count; j++)
if (starts[i].Item2 == ends[j].Item2)
if (!tuples.Contains((starts[i].Item1, ends[i].Item1)))
tuples.Add((starts[i].Item1, ends[j].Item1));
//remove all already visited scopes
var visited = new System.Collections.Generic.List<int>();
var _new = new System.Collections.Generic.List<Tuple<int, int>>();
foreach (var item in tuples)
if (!visited.Contains(item.Item1) && !visited.Contains(item.Item2))
{
_new.Add(new Tuple<int, int>(item.Item1, item.Item2));
visited.Add(item.Item1);
visited.Add(item.Item2);
}
return _new;
看起来很多更大,但是很多[[更快-同一文件为0.75s。
你们这是什么?它是[[faster,没关系,它看起来更大。