は、私はこのように見ている辺の集合を持っています。 「バランスのとれた」の意味では、どの頂点にも同じエッジ数があることを意味します。現在のコードはバランス重視グラフ
public static bool IsGraphBalanced<T>(List<Edge<T>> edges)
{
var from = new Dictionary<T, int>);
var to = new Dictionary<T, int>);
foreach (var edge in edges)
{
if (!from.ContainsKey(edge.From))
from.Add(edge.From, 0);
if (!to.ContainsKey(edge.To))
to.Add(edge.To, 0);
from[edge.From] += 1;
to[edge.To] += 1;
}
foreach (var kv in from)
{
if (!to.ContainsKey(kv.Key))
return false;
if (to[kv.Key] != kv.Value)
return false;
}
// mirrored check with foreach on "to" dictionary
return true;
}
Linqで置き換えることはできますか?
P.S. edges
のサイズ100〜150の項目の下にあるので、私は読みやすさではなく、パフォーマンスを気に
この場合、頂点を照会する方が簡単でしょうか?頂点オブジェクトがあると仮定すると、edgesFromCount/edgesToCountを返すメソッドを作ることができます。 – hellyale
@hellyale私の頂点は 'T'のリストです。このリストから 'edgesFromCount'をどのように取得できますか? –
'if(to.ContainsKey(kv.Key)) 'のチェックが正しいですか?それは 'if(!...)'のように見えます。 –