トップページ > プログラム > 2017年11月15日 > DCxsxqPWd

書き込み順位&時間帯一覧

9 位/217 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000101100000100004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん (スッップ Sd9f-gk0q)
ふらっと C#,C♯,C#(初心者用) Part133

書き込みレス一覧

ふらっと 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);
}


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。