我創建了一個不可變的簡單圖類(它不需要支持循環或多邊)。每個節點由一個整數值表示,從0到numNodes。使用Linq構建一個圖類;你能讓這段代碼看起來更好嗎?
此代碼有效,但我認爲Linq查詢和for循環相當難看。你能想出一個更清晰的方式來填充_edges嗎?
public class Graph {
private IList<IList<int>> _edges;
public int Nodes { get; private set;
}
public Graph(int numNodes, IList<Tuple<int,int>> edges) {
Nodes = numNodes;
_edges = new List<IList<int>>();
for(int i = 0; i < numNodes; i++) {
_edges.Add(new List<int>(
(from e in edges where e.Item1 == i
select e.Item2).Union(
(from e in edges where e.Item2 == i
select e.Item1).Distinct())));
}
}
public IEnumerable<int> Neighbors(int node) {
return _edges[node];
}
}