Як в c # можна розбити масив на кілька масивів зі збереженням всіх даних stack overflow на

@STDray: (1) невже інваріант не очевидний? послідовність елементів шматків збігається з вихідною послідовністю хоча б в разі, якщо вона є незмінною. (2) в production-коді у вас не вийде так просто змінювати сигнатури методів, якщо, звичайно, над проектом працює більше 1 людини. крім того, не відловлювали компілятором зміна мутабельном списків - джерело wtf ( "мені передали List в підпрограму, якого я не повинен міняти його? ") і багів. (не думати - не завжди найкраща стратегія, потім може бути запізно.) - VladD 22 Квітня '13 о 15:16

Якщо хто вирішить міняти шматки, значить такого інваріанта на відповідність вихідної колекції немає. При тому неважливо, чи буде мутований список або породжена нова колекція. Звичайно у мене вийде міняти сигнатури, інакше навіщо нам типізовані мови. Якщо людині передали список, він вільний її міняти. Все правильно. - STDray 22 Квітня '13 о 15:26

@VladD, якщо у вас є якісь критерії потрібності, краще їх вказати відразу. І зрозумілі причини теж треба вказати, оскільки я вже написав, що важливо знати з якої саме колекцією маємо справу. Якщо коротко, я керуюся принципом: мінімальні вимоги на вході, максимальні - на виході. - STDray 22 Квітня '13 о 12:15

@VladD, сформувати ледачий IEnumerable> За один прохід складно, адже виклики Skip (K * N) .Take (N) призводять до неодноразового повторного ітерірованію по вихідній колекції. А енергійний List> Може занадто дорого обійтися по пам'яті, вимагаючи при цьому, той же самий один прохід. Мій типовий сценарій - отримувати дані із зовнішнього джерела і шматками їх обробляти. Покладатися на те, що у мене вистачить пам'яті на все, я не можу. - STDray 21 Квітня '13 о 23:32

@STDray: тим не менш, ви покладаєтеся на те, що на один шматок пам'яті вистачить. Не впевнений, що повністю ліниве розбиття взагалі можливо, по крайней мере, я не бачу очевидного шляху. (Це ускладнюється тим, що користувач може спочатку пробігти по останньому шматку.) - VladD 21 Квітня '13 о 23:37

@VladD, на один шматок вистачить, адже я сам вибираю його розмір. Я хотів зробити акцент на обираних структурах даних. Якщо правильно їх підбирати, розуміючи їх пристрій, то можна уникнути будь-яких ускладнень. Наприклад, знаючи, що в загальному випадку навіть Count () для IEnumerable - це O (n), ніхто не захоче бігти за останнім шматку. - STDray 21 Квітня '13 о 23:45

@STDray: оскільки ТС не говорить про специфіку його завдання, нам доводиться гадати. --- Для вашого патерну, можливо, IEnumerable<> зайвий: його зміст як раз в обробці по 1 елементу, а не по n. і ледачому читання їх, ви ж використовуєте по суті блочне читання. - VladD 21 Квітня '13 о 23:51

Схожі статті