LINQでList<string[]>から検索してインデックスで返すやつ
最近の業務でCSVファイルをあれこれいじくるっていうのをC#で書いてる。
C#自体はなんかJavaみたいで特に問題はなくするする書けるのだけど
LINQで列挙するような奴がすごく便利だとは気づいたけどなかなか難しい。
CSVファイルはVB.NETにあるTextFieldParserを使ってList<string[]>
にしているのだけど、
扱ってるファイルはものによってどこに何があるのかというのが違ってくる場合があって
その揺れを吸収してなんとか必要な範囲だけの値を取り出したくこんなものを書いた。
var f = new List<string[]>
{
new string[] {"a","b" }
new string[] {"c","d" },
new string[] {"e","f","g" },
new string[] {"1","g","f" },
new string[] {"h","i","j" },
new string[] {"k","l" }
};
var d = f
.Where(l => l[0] == "e")
.FirstOrDefault()?
.Select((s, i) => new { s, i })
.Where(t => t.s == "f")
.Select(l => new {
CIndex = l.i,
RIndex = f
.Select((a, i) => new { Line = a, ri = i })
.Where(s => s.Line[0] == "e")
.FirstOrDefault()?
.ri
}
);
Console.WriteLine($"{d?.Single().RIndex}:{d?.Single().CIndex}");
Console.ReadKey();
ある文字列から始まる行のどこにもう一つの文字列があるかを調べるもの。
0からはじまるインデックスで返してくれるはず。
C# 6.0から追加された?.
演算子も便利。
冗長かなとは思うけどとりあえずこれでなんとかなったので良しとした。
見つかった場所のインデックスを列挙できたりメソッドにしてやれば便利なんだろうけど、
そこまで勉強できてないのでここまで。
すごいつよいひとはもっとわかりやすく書けるのだろうけど自分には限界でした。
Author And Source
この問題について(LINQでList<string[]>から検索してインデックスで返すやつ), 我々は、より多くの情報をここで見つけました https://qiita.com/klaNath/items/a4d39ddfb4c3cd26128a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .