- ふらっと C#,C♯,C#(初心者用) Part133
401 :デフォルトの名無しさん (スッップ Sd9f-gk0q)[sage]:2017/11/15(水) 10:01:55.68 ID:DCxsxqPWd - >>397
やりたいのは文字列じゃないけどこんな感じのイメージ パフォーマンスはしらない var list = new List<string>() { "○", "×", "×", "×" , "○", "△", "△", "○", "△" }; Func<string, bool> isFirst = (item) => item == "○"; int groupingId = 0; var result = list.Select(item =>{ if (isFirst(item)) { groupingId++; } return new { Id = groupingId, Value = item }; }) .GroupBy(pair => pair.Id, pair => pair.Value); // { "○", "×", "×", "×"}{"○", "△", "△"}{"○", "△" } List<List<string>> hoge = result.Select(group => group.ToList()).ToList();
| - ふらっと C#,C♯,C#(初心者用) Part133
409 :デフォルトの名無しさん (スッップ Sd9f-gk0q)[sage]:2017/11/15(水) 12:29:09.51 ID:DCxsxqPWd - >>405
Agreegate余り使ったことなかったけど便利だな こっちの方が綺麗だ if (isFirst(item) ||prevList.Count>0) 書いてなかったけど、リストの先頭が〇とは限らないのでこんな感じで
| - ふらっと C#,C♯,C#(初心者用) Part133
416 :デフォルトの名無しさん (スッップ Sd9f-gk0q)[sage]:2017/11/15(水) 13:11:40.68 ID:DCxsxqPWd - 確かに目新しさにおおーってなったけど、これただのforeachでいいな
やっぱシンプルにループさせるのが最強か var result = new List<List<string>>(); list.ForEach(item => { if (isFirst(item) || list.Count <= 0){ result.Add(new List<string>()); } result.Last().Add(item); });
| - ふらっと C#,C♯,C#(初心者用) Part133
431 :デフォルトの名無しさん (スッップ Sd9f-gk0q)[sage]:2017/11/15(水) 19:00:28.04 ID:DCxsxqPWd - >>418
Selectなくても大丈夫だったか hogeのGetEnumeratorが呼ばれる度にindexが増えていくのが気になるけど 戻り値はIEnumerableでもIGroupingどっちでもいいけどkeyは隠すかも もし必要になったら以下のメソッドを作って、foreachと速度比較してって採用するかどうかって感じかな 色々と参考になった public static IEnumerable<IEnumerable<string> Split<T>(IEnumerable<T> source, Func<T, bool> predicate){ var index = 0; return source.GroupBy(x => predicate(x) ? ++index : index); }
|
|