“Циклы с условием продолжения” должны быть предпочтены “для циклов” для больших, необходимых циклов в R?

Вот некоторый код, который подробно останавливается на понятии @Samuel Kim наличия способа отключить ViewState на почти определенных средствах управления (btw, это использует.NET 3.5):

List<string> allowedControls = new List<string> { "Control1", "Control3" };
IEnumerable<Control> controlsWithoutViewState = Page.Controls.Where(c => !allowedControls.Contains(c.ID));
foreach(Control c controlsWithoutViewState){
  if(c is WebControl) ((WebControl)c).EnableViewState = false;
}

единственная вещь я не на 100% уверен в (и у меня нет своего VM, работающего), то, ли Page. Средства управления должны быть брошены или нет, раз так просто иметь это вместо этого:

IEnumerable<Control> controlsWithoutViewState = Page.Controls.Cast<Control>().Where(c => !allowedControls.Contains(c.ID));

Вышеупомянутое является только быстрым понятием того, что сделать, это не принимает во внимание вложенные средства управления, где можно хотеть 1 с и 1 без ViewState, но не было бы трудно сделать рекурсивную функцию для обработки его.

6
задан Dan Goldstein 6 August 2009 в 13:35
поделиться

1 ответ

Во-первых, большая часть этой болтовни «петли - это плохо» происходит из темных веков, когда петли были менее эффективно реализованы, в частности, в некоторых версиях S-Plus.

Тем не менее, и хотя ваш комментарий о необходимости в большом индексном объекте верен, вы также можете использовать

  • функции из семейства apply , такие как sapply , lapply или tapply , чтобы развернуть ваши структуры

  • относительно новый пакет итераторов , который также избегает большого вектора, который вы упомянули как ограничение памяти

  • , Ra 'ускоренный вариант R' и его jit-пакет , который может значительно ускорить простые циклы.

В качестве дополнительного бонуса,

12
ответ дан 9 December 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: