vectores una rangos producto por operacion multiplicar multiplicacion matriz matrices extraer escalar elementos determinante con codigo ciclos c# arrays indexing c#-8.0

c# - una - producto escalar de matrices matlab



¿Por qué el nuevo índice de operador de sombrero de la función de división de matrices de C#8 no comienza en 0? (1)

Respuesta oficial

Para una mejor visibilidad, aquí hay un comentario de Mads Torgersen que explica esta decisión de diseño de la publicación del blog C # 8 :

Decidimos seguir a Python cuando se trata de la aritmética desde el principio y desde el final. 0 designa el primer elemento (como siempre), y ^0 el elemento "length''th", es decir, el que está justo al final. De esa manera, obtienes una relación simple, donde la posición de un elemento desde el principio más su posición desde el final es igual a la longitud. la x en ^x es lo que habrías restado de la longitud si hubieras hecho los cálculos tú mismo.

¿Por qué no usar el operador menos ( - ) en lugar del nuevo operador hat ( ^ )? Esto tiene que ver principalmente con rangos. Nuevamente, de acuerdo con Python y la mayor parte de la industria, queremos que nuestras gamas sean inclusivas al principio, exclusivas al final. ¿Cuál es el índice que pasa para decir que un rango debe ir hasta el final? En C # la respuesta es simple: x..^0 va desde x hasta el final. En Python, no hay un índice explícito que puedas dar: -0 no funciona, porque es igual a 0 , ¡el primer elemento! Así que en Python, debes dejar el índice final completamente apagado para expresar un rango que va hasta el final: x.. Si se calcula el final del rango, debe recordar tener una lógica especial en caso de que salga a 0 . Como en x..-y , donde y se calculó y salió a 0 . Esta es una molestia común y una fuente de errores.

Finalmente, tenga en cuenta que los índices y los rangos son tipos de primera clase en .NET / C #. Su comportamiento no está vinculado a lo que se aplican, o incluso a ser utilizados en un indexador. Puede definir totalmente su propio indexador que toma Index y otro que toma Range , y vamos a agregar dichos indexadores a, por ejemplo, Span . Pero también puedes tener métodos que tomen rangos, por ejemplo.

Mi respuesta

Creo que esto es para que coincida con la sintaxis clásica a la que estamos acostumbrados:

value[^1] == value[value.Length - 1]

Si usara 0, sería confuso cuando las dos sintaxis se usaran una al lado de la otra. De esta manera tiene menor carga cognitiva.

Otros lenguajes como Python también usan la misma convención.

C # 8.0 presenta una forma conveniente de dividir los arreglos: consulte la publicación oficial de blog de C # 8.0 .

La sintaxis para acceder al último elemento de una matriz es

int value[] = { 10, 11, 12, 13 }; int a = value[^1]; // 13 int b = value[^2]; // 12

Me pregunto por qué la indexación para acceder a los elementos hacia atrás comienza en 1 en lugar de 0? ¿Hay alguna razón técnica para esto?