2012-03-13 12 views
2

私はこれがあなたの指導者には間違いないと確信していますが、今日はまっすぐ考えるのが難しいです。リストのコレクションからアイテムを削除する

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (f => f.ToString().Contains("Not available")) 
.Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)) 
.ToList(); 

結果は次のとおりです:

のList1:

"GCE" 
Not available 
"" 
"RES" 
9.97000000 
9.99000000 

LIST2:

"WRK.UN" 
Not available 
"" 
"INT" 
16.22000000 
16.22000000 

私の質問があり、私はこのLINQコードを使用して取得リストのコレクションを持っています私のリストのコレクションを保持することができますが、それらのリストのそれぞれの3番目の要素を除外することはできますか?新しいリストを作成したり、アイテムを削除したりする方が簡単ですか?

のList1::だから、リストの私のエンディングコレクションは次のようになります

"GCE" 
Not available 
"RES" 
9.97000000 
9.99000000 

をLIST2:

"WRK.UN" 
Not available 
"INT" 
16.22000000 
16.22000000 

事前に感謝します。あなたは常にリストのちょうど第三の要素を削除したいので、あなたがList1.RemoveAt(2)とList2.RemoveAtを(使用することができます

.Where ((f, index) => index != 2 && f.ToString().Contains("Not available")) 

答えて

1

感謝を。

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (line => line.Contains("Not available")) 
.Select(line => 
    line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries) 
    .Where((col, index) => index!=2)) 
.ToList(); 
3

あなたはこれを行うには、このWhere -Overloadを使用することができます2)リストから3番目の要素を削除します。

+0

私はそれが第3行ではなく、スキップしたい各行の第3列と仮定します。だから、この「Where」は早すぎる。 –

+1

あなたは正しいかもしれません - 例を見ているだけでした(あまり明確ではありません) - この場合、似たものを置く必要があります。次の選択の中で - それは大きな問題ではないと思います) – Carsten

+0

ポインタをありがとう。それがトリックでした。 –

3

あなたはそれをスキップするWhereでインデクサーを使用することができます。ポインタのための@Tim & @Carstenへ

var errPRNlines = File.ReadAllLines(myFile.FullName.ToString(), Encoding.GetEncoding(1250)) 
.Skip(1) 
.Where (line => line.Contains("Not available")) 
.Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)) 
.Where((col, index) => index!=2) 
.ToList(); 
+0

あなたのコードは私のList2を完全に取り出しました。これらのリストのそれぞれで3番目の要素を削除したいだけです。 –

+0

ありがとう@Tim。 Carstenの提案に加えて、あなたのコードをより効果的に使うことができました。私は正しいコードを貼り付けました。 –

関連する問題