@Rally25s:
string val;
GetParameterValue("parameterName", out val);
Это неясно из Вашего сообщения (в ответах), что проблема, с которой был. Если объявлено как:
void GetParameterValue<T>(string parameterName, out T val) { }
, Чем вызов, поскольку Вы записали его выше, будет работать (Вы не должны определять тип). Я - предположение, которое не работало на Вас, потому что Вы не можете использовать свойство в качестве параметр. Путь вокруг этого состоит в том, чтобы использовать оба метода:
T GetParameterValue<T>(string parameterName, T ununsed) { }
Это назвали бы как это:
MyObj.SomeProp = GetParameterValue("parameterName", MyObj.SomeProp);
, который является скорее kludgey, но не худшая представленная методика.
<час>А различный метод, который я использовал в C++, но еще не попробовал в C#, должен иметь GetParameterValue () некоторый объект Вас собственный дизайн, и затем реализовать много неявных операторов броска для него.
class ParameterHelper
{
private object value;
public ParameterHelper(object value) { this.value = value; }
public static implicit operator int(ParameterHelper v)
{ return (int) v.value; }
}
ParameterHelper GetParameterValue( string parameterName);
MyObj.SomeProp = GetParameterValue("parameterName");
Python - это язык. Существует несколько реализаций , и они могут иметь разные реализации для списков. Таким образом, не глядя на код реальной реализации, вы не можете точно знать, как реализованы списки и как они ведут себя при определенных обстоятельствах.
Могу поспорить, что ссылки на объекты в списке хранятся в непрерывной памяти (конечно, не как связанный список ...). Если это действительно так, то вставка с использованием x.insert
приведет к перемещению всех элементов за вставленным элементом. Это может быть эффективно выполнено с помощью оборудования, но сложность все равно будет O (n) .
Для небольших списков операция пополам
может занять больше времени, чем x .insert
, даже если первый равен O (log n) , а второй - O (n) . Однако для длинных списков я рискну предположить, что узким местом является x.insert
. В таких случаях вы должны рассмотреть возможность использования другой структуры данных.
x.insert
приведет к перемещению всех элементов за вставленным элементом. Это может быть эффективно выполнено с помощью оборудования, но сложность все равно будет O (n) .
Для небольших списков операция пополам
может занять больше времени, чем x .insert
, даже если первый равен O (log n) , а второй - O (n) . Однако для длинных списков я рискну предположить, что узким местом является x.insert
. В таких случаях вы должны рассмотреть возможность использования другой структуры данных.
x.insert
приведет к перемещению всех элементов за вставленным элементом. Это может быть эффективно сделано с помощью оборудования, но сложность все равно будет O (n) .
Для небольших списков операция пополам
может занять больше времени, чем x .insert
, даже если первый равен O (log n) , а второй - O (n) . Однако для длинных списков я рискну предположить, что узким местом является x.insert
. В таких случаях следует рассмотреть возможность использования другой структуры данных.
Для небольших списков операция bisect
может занять больше времени, чем x.insert
, даже если первое равно O (log n) , а второе - O (n) . Однако для длинных списков я рискну предположить, что узким местом является x.insert
. В таких случаях следует рассмотреть возможность использования другой структуры данных.
Для небольших списков операция bisect
может занять больше времени, чем x.insert
, даже если первое равно O (log n) , а второе - O (n) . Однако для длинных списков я рискну предположить, что узким местом является x.insert
. В таких случаях вы должны рассмотреть возможность использования другой структуры данных.
Списки CPython представляют собой непрерывные массивы. Какая из вставок O (log n) bisect и O (n) доминирует в вашем профиле производительности, зависит от размера вашего списка, а также от постоянных факторов внутри O (). В частности, функция сравнения, вызываемая bisect, может быть довольно затратной в зависимости от типа объектов в списке.
Если вам нужно хранить потенциально большие изменяемые отсортированные последовательности, то линейный массив, лежащий в основе типа списка Pythons, не является хорошим выбором. В зависимости от ваших требований могут подойти кучи, деревья или списки пропусков.