は、私は文字列の配列を持っていると言う:C#、LINQを使用してマーカー間でアイテムを何度も何度も選ぶ方法は?
string[] strArray = {"aa", "bb", "xx", "cc", "xx", "dd", "ee", "ff", "xx","xx","gg","xx"};
は、どのように私はグループとして、「XX」マーカー間の文字列を抽出するためにLINQを使用していますか?あなたが最後のマーカーを過ぎて結果をフィルタリングしたい場合は
string[] strArray = { "aa", "bb", "xx", "cc", "xx", "dd",
"ee", "ff", "xx", "xx", "gg", "xx" };
var result =
strArray.Aggregate((IEnumerable<IEnumerable<string>>)new IEnumerable<string>[0],
(a, s) => s == "xx" ? a.Concat(new[] { new string[0] })
: a.Any() ? a.Except(new[] { a.Last() })
.Concat(new[] { a.Last().Concat(new[] { s }) }) : a)
.Where(l => l.Any());
// Test
foreach (var i in result)
Console.WriteLine(String.Join(",", i.ToArray()));
:
cc
dd,ee,ff
gg
どのように世界でそれを理解しましたか?それは印象的です! +1 –
@ジョーズ:ありがとう。しかし、それは難しかったです。それはちょっとしたハックです。あなたが何らかのループとしてAggregateを見ると、それは理にかなっています。 –
+1邪悪なラムダカンフーです。実用的な目的のために、これはおそらく最も読み難いものではありませんが(それはTOO悪くはありません)、それでもそれでもなお非常に印象的です! –