2016-10-19 29 views
-1

のリンクでジャグ配列をフラット化:例えば、整数のジャグ配列与えられた値

var arr = new int[11][] { 
    new int[] { 0, 7 }, 
    new int[] { 1 }, 
    new int[] { 2, 5, 6 }, 
    new int[] { 3 }, 
    new int[] { 4 }, 
    new int[] { 5, 6 }, 
    new int[] { 6 }, 
    new int[] { 7, 9 }, 
    new int[] { 8, 10 }, 
    new int[] { 9 }, 
    new int[] { 10 } 
}; 

は、それが効率的にするにはどうすればよいの項目の1次元配列を生成するために平らに自分の位置やリンクの順にそれらの値の間。上記アレイの出力は次のようになります。

{ 0, 7, 9, 1, 2, 5, 6, 3, 4, 8, 10 } 

この特定の例では、それらが共通の数、それらを連結7を有するように、{ 0, 7 }{ 7, 9 }が組み合わされます。また、{ 5, 6 }{ 6 }などの重複を削除します。

私はあまりにも多くの逆参照を望んでいます。可能であれば、いくつかのネストされたループは避けることができますが、LINQ/PLINQを使用している可能性があります。スマート・インプレース・ストリング操作。

+1

何 '{0,7}'と '{7,9もし} 'と' {7、10} 'は配列に存在しますか? – dotctor

+0

これには非効率的なアルゴリズムがありますか? – dotctor

+0

質問は明確に定義されていません。何が起こるべきかが完全にはっきりしていないケースが多すぎます。あなたの例では、サブ配列を自由に並べ替えて "短く"なる結果が得られることを暗示しているようです。並べ替える方法が複数ある場合はどうなりますか?どちらを選ぶべきですか?いくつかの取り決めが他の取り決めより短い結果を生み出す場合 – Jon

答えて

1

あなたの例の結果は、あなたのサブアレイの対は

{2,5,6}形態有向エッジ(アーク)2-グラフの辺を形成するDAG(有向非巡回グラフ)のtopological sortingの結果として発見される可能性があります> 5および5-> 6である。

トポソートまた、{2,3}、{3,5}、などが可能矛盾(サイクル)を発見する{5,2}

+0

トポロジカルな並べ替えを提案していただきありがとうございます。それはまさに私が探していたものです。 – Nick

関連する問題