Это не зависит от языка, но я буду использовать примеры в C#
. Часто мне приходится сталкиваться с проблемой, в которой мне нужно добавить parameter
в object
внутри любой заданной итерации хотя бы одного из ее параметров, и я всегда должен придумать lame временный list
или array
какого-либо сопутствующего проблема его правильной корреляции.Переменная, связанная с итерацией?
Так, пожалуйста, медведь со мной на примерах ниже:
Есть более простой и лучший способ сделать это в C#?
List<String> storeStr; void AssignStringListWithNewUniqueStr (List<String> aList) { foreach (String str in aList) { storeStr.add(str); str = AProcedureToGenerateNewUniqueStr(); } } void PrintStringListWithNewUniqueStr (List<String> aList) { int i = 0; foreach (String str in aList) { print(str + storeStr[i]); i++; } }
Обратите внимание на корреляции выше гарантируются только потому, что я перебор неизмененного aList
. Когда вы спрашиваете о «более легком и лучшем способе», я имею в виду, что он также должен быть уверен, что storeStr
всегда будет коррелирован с его эквивалентом на aList
, сохраняя при этом как можно более коротким и простым. List
мог также быть любым видом array
или object
.
Есть ли язык, в котором что-то как это возможно? Он должен давать те же результаты, что и выше.
IterationBound<String> storeStr; void AssignStringListWithNewUniqueStr (List<String> aList) { foreach (String str in aList) { storeStr = str; str = AProcedureToGenerateNewUniqueStr(); } } void PrintStringListWithNewUniqueStr (List<String> aList) { foreach (String str in aList) { print(str + storeStr); } }
В этом случае фиктивный «IterationBound
» вид гарантировал бы корреляцию между списком и новым параметром (в некотором смысле, так же, как Мусоровозы гарантия ALLOCS). Было бы как-то заметить, что оно было создано внутри итерации и ассоциировано с этим конкретным индексом (независимо от того, будет ли синтаксис более уродливым, конечно). Затем, когда он снова вызван на другой итерации, и он уже был создан или сохранен в этом конкретном индексе, он будет извлекать это конкретное значение этой итерации.
Звучит идеально! – cregox
На самом деле ... Теперь я нашел пару проблем с этим ... Сначала практический: я не мог понять, как объявить «комбинацию» для использования вне области действия метода (как указано в недавно отредактированном вопрос). Что касается проблемы «хорошего настроения»: это кажется излишним: что-то, что может добавить ограничения на его использование. Я еще не тестировал его, но теперь мне интересно, будет ли это работать в моем случае использования: unity3d на ios. – cregox
Если вам нужно получить доступ к нему вне метода, вам нужно будет использовать строго типизированный объект вместо анонимного объекта, например 'Tuple' и т. Д. Тогда комбинация представляет собой' IEnumerable > ', который вы можете укажите тип возврата. –
Tejs