2016-04-05 2 views
0

私は整数のリストを持っています。リスト内の整数リストをフィルタリングするにはどうすればいいですか?C#フィルタリングされた整数のリストのリスト

例: - L = [[0,1,2], [], [1], [1,2,3]]。 linqを使用してL = [[0,1,2], [1], [1,2,3]]を取得するにはどうすればフィルタリングできますか?

ここでは[0,1,2]は整数のリストです。

これは私の以前の質問に関連しています。私は整数リストのリストを返す再帰関数を持っているので、空リストをフィルタリングする必要があります。

 int [] num_list = new int[10]{2, 3, 5, 9, 14, 19, 23, 45, 92, 100}; 

     public List<List<int>> find_solutions(int n, int t, int w) 
     { 

      if (n == 2) 
      { 
       List<int> s = new List<int>(); 
       for (var i=0; i <= t; i++) 
       { 
        if (i * num_list[1] + (t - i) * num_list[0] == w) 
        { 
         s.Add(i); 
         s.Add(t - i); 
        } 
       } 
       return new List<List<int>> { s }; 
      } 

      List<List<int>> f = new List<List<int>>(); 
      List<List<int>> temp_list = new List<List<int>>(); 
      for (int i=0; i <= Math.Min(t, w/num_list[n-1]); i++) 
      { 

       temp_list = find_solutions(n - 1, t - i, w - i * num_list[n - 1]); 

       // I strongly believe that i am getting empty list 
       // and I should filter out empty list form temp_list 
       // and I need to insert 'i' to each list inside list 

       foreach(List<int> c in temp_list) 
       { 
        c.Insert(0, i); 
       } 
       f.addRange(temp_list); 
      } 
      return f; 
     } 

答えて

0

あなたはWhere()を使用してCountを求めてフィルタリングすることができます:あなたは任意の空のエントリをフィルタリングするためにWhereAnyを使用することができます

var list = new List<List<int>>(); 
... 


list = list.Where(l => l.Count > 0).ToList(); 
1
int[][] allLists = new int[][] { new int[] { 0, 1, 2 }, new int[] { }, 
    new int[] { 1 }, new int[] { 1, 2, 3 } }; 

int[][] nonEmtpy = allLists.Where(list => list.Any()).ToArray(); 

0

このようにしますか?

L.Where(i => i.Count() > 0).ToList() 
1
var listOfLists = L; //To use a better name for L 
var nonEmptyLists = listOfLists.Where(innerList => innerList.Any()); 

あなたはこのを反復、および/または必要に応じてToListまたはToArrayを呼び出すことができます

+1

Er ...大文字と小文字の「L」は混在していると思います。 –

+0

@JoachimIsaksson:その友達に感謝し、今すぐ修正しました。 –

1

次の方法でこれを達成することができます

L.Where(p=>p.Any()).ToList(); 
L.Where(p=>p.Count > 0).ToList(); 

Countプロパティがために最適化されICollection<T>ここで、Tはタイプです。 Any()は列挙子を構築する必要があります。 CountプロパティはAny()メソッドより高速です

+0

'Count'は高速ですが、' Any() 'はより明確です。私は1つのアイテムを持つリストの簡単なチェックを行い、100,000,000を超えるチェックが「カウント」〜30msの間に出てきました。「Any()」は3100から出てきます。これは、CountがAny()の時間の〜1%で実行されることを意味します。しかし、リスト(または配列)を最適化する良い理由がなければ、Any()を好きで、プロセッサからすべての目盛りを絞り出す必要がありました。 –

+0

は誰に明確になりましたか?プロセッサーかあなたですか? ;) –

+0

コードを見ている人にとって、最も重要なものを明確にします。 –

関連する問題