Artículos

6: matrices


6: matrices

Las matrices son objetos en forma de lista cuyo prototipo tiene métodos para realizar operaciones transversales y de mutación. Ni la longitud de una matriz de JavaScript ni los tipos de sus elementos son fijos. Dado que la longitud de una matriz puede cambiar en cualquier momento, y los datos se pueden almacenar en ubicaciones no contiguas en la matriz, no se garantiza que las matrices de JavaScript sean densas, esto depende de cómo el programador elija usarlas. En general, estas son características convenientes, pero si estas características no son deseables para su uso particular, podría considerar el uso de matrices escritas.

Las matrices no pueden usar cadenas como índices de elementos (como en una matriz asociativa) pero deben usar enteros. La configuración o el acceso a través de números no enteros utilizando la notación de corchetes (o notación de puntos) no establecerá ni recuperará un elemento de la lista de la matriz en sí, sino que establecerá o accederá a una variable asociada con la colección de propiedades del objeto de esa matriz. Las propiedades del objeto de la matriz y la lista de elementos de la matriz son independientes, y las operaciones de mutación y desplazamiento de la matriz no se pueden aplicar a estas propiedades nombradas.

Operaciones comunes

Crear una matriz

Acceda a un elemento de la matriz utilizando la posición del índice

Bucle sobre una matriz

Agregar un elemento al final de una matriz

Eliminar un elemento del final de una matriz

Eliminar un elemento del principio de una matriz

Agregar un elemento al comienzo de una matriz

Encuentra el índice de un elemento en la matriz

Eliminar un elemento por posición de índice

Eliminar elementos de una posición de índice

Copiar una matriz

Accediendo a los elementos de la matriz

Las matrices de JavaScript están indexadas a cero. El primer elemento de una matriz está en el índice 0 y el último elemento está en el valor del índice igual al valor de la propiedad de longitud de la matriz menos 1.

El uso de un número de índice no válido devuelve indefinido.

Los elementos de matriz son propiedades de objeto de la misma manera que toString es una propiedad (sin embargo, para ser específicos, toString () es un método). Sin embargo, intentar acceder a un elemento de una matriz de la siguiente manera arroja un error de sintaxis porque el nombre de la propiedad no es válido:

No hay nada especial en las matrices de JavaScript y las propiedades que causan esto. No se puede hacer referencia a las propiedades de JavaScript que comienzan con un dígito con notación de puntos y se debe acceder a ellas mediante notación de corchetes.

Por ejemplo, si tiene un objeto con una propiedad denominada 3d, solo se puede hacer referencia a él mediante la notación entre corchetes.

En el ejemplo 3d, '3d' tenido para ser citado (porque comienza con un dígito). Pero también es posible citar los índices de la matriz (por ejemplo, años ['2'] en lugar de años [2]), aunque no es necesario.

El motor de JavaScript convierte el 2 en años [2] en una cadena mediante una conversión toString implícita. Como resultado, '2' y '02' se referirían a dos ranuras diferentes en el objeto años, y el siguiente ejemplo podría ser cierto:

Relación entre longitud y propiedades numéricas

La propiedad de longitud de una matriz de JavaScript y las propiedades numéricas están conectadas.

Varios de los métodos de matriz integrados (por ejemplo, join (), slice (), indexOf (), etc.) tienen en cuenta el valor de la propiedad de longitud de una matriz cuando se llaman.

Otros métodos (por ejemplo, empujar (), empalmar (), etc.) también dan como resultado actualizaciones en la propiedad de longitud de una matriz.

Al establecer una propiedad en una matriz de JavaScript cuando la propiedad es un índice de matriz válido y ese índice está fuera de los límites actuales de la matriz, el motor actualizará la propiedad de longitud de la matriz en consecuencia:

Sin embargo, al disminuir la propiedad de longitud, se eliminan elementos.

Esto se explica más detalladamente en la página Array.length.

Creando una matriz usando el resultado de una coincidencia

El resultado de una coincidencia entre una expresión regular y una cadena puede crear una matriz de JavaScript. Esta matriz tiene propiedades y elementos que proporcionan información sobre la coincidencia. Esta matriz es devuelta por RegExp.exec (), String.match () y String.replace ().

Para ayudar a explicar estas propiedades y elementos, vea este ejemplo y luego consulte la tabla siguiente:

Las propiedades y elementos devueltos de esta coincidencia son los siguientes:

Propiedad / Elemento Descripción Ejemplo
aporte
Solo lectura
La cadena original con la que se comparó la expresión regular. "cdbBdbsbz"
índice
Solo lectura
El índice de base cero de la coincidencia en la cadena. 1
[0]
Solo lectura
Los últimos personajes emparejados. "dbBd"
[1],. [norte]
Solo lectura
Elementos que especifican las coincidencias de subcadenas entre paréntesis (si se incluyen) en la expresión regular. El número de posibles subcadenas entre paréntesis es ilimitado. [1]: "bB"
[2]: "d"


6,9. Examen de práctica para matrices¶

Los siguientes problemas son más difícil de lo que probablemente verá en el examen AP CS A. Vienen de la investigación en la educación en ciencias de la computación y prueban su capacidad para rastrear y comprender código complejo con bucles, matrices y condicionales. Se utilizan con permiso de Raymond Lister de la Universidad de Tecnología, Sydney, Australia.

Por favor, responda a cada uno lo mejor que pueda.

Haga clic en el botón "Iniciar" cuando esté listo para comenzar el examen, pero solo entonces, ya que solo puede realizar el examen una vez. Haga clic en el botón "Pausar" para pausar el examen (no podrá ver las preguntas cuando el examen esté en pausa). Haga clic en el botón "Finalizar examen" al final solo cuando haya terminado. Mostrará el número correcto, el número incorrecto y el número omitido después del botón "Finalizar examen".

6-9-1: ¿Cuál es el valor de i después de que se haya ejecutado el siguiente código?

6-9-2: ¿Cuál es el valor de count después de que se haya ejecutado el siguiente código?

6-9-3: ¿Cuál es el valor de count después de que se haya ejecutado el siguiente código?

6-9-4: ¿Cuál es el valor de count después de que se haya ejecutado el siguiente código?

6-9-5: Después de ejecutar el siguiente código, ¿cuál de los siguientes son los valores en x?

6-9-6: ¿Cuál de los siguientes es el código que falta en el método isSorted para que verifique correctamente que todos los elementos en x están ordenados en orden ascendente?

6-9-7: ¿Cuál es el valor de i después de que se ejecuta el siguiente código?

6-9-8: Si dos números cualesquiera en una matriz de enteros, no necesariamente números consecutivos en la matriz, están fuera de orden (es decir, el número que aparece primero en la matriz es mayor que el número que aparece en segundo lugar), entonces eso se llama inversión. Por ejemplo, considere una matriz "x" que tiene los valores <1, 4, 3, 2>. Luego, hay tres inversiones, ya que 4 es mayor que 3 y 2 y 3 es mayor que 2. ¿Cuál de las siguientes opciones se puede usar para reemplazar el código faltante para que el código cuente correctamente el número de inversiones?

6-9-9: ¿Cuál de las siguientes opciones copia correctamente todos los números pares de matriz1 a matriz2 en el mismo orden en que están en matriz1 sin ningún error? Suponga que matriz2 es lo suficientemente grande para todos los valores copiados.

6-9-10: Después de que se ejecuta el siguiente código, ¿cuáles son los valores en array2?


Matrices

Una matriz es una serie de elementos del mismo tipo colocados en ubicaciones de memoria contiguas a las que se puede hacer referencia individualmente agregando un índice a un identificador único.

Eso significa que, por ejemplo, cinco valores de tipo int se pueden declarar como una matriz sin tener que declarar 5 variables diferentes (cada una con su propio identificador). En cambio, usando una matriz, los cinco valores int se almacenan en ubicaciones de memoria contiguas, y se puede acceder a los cinco usando el mismo identificador, con el índice adecuado.

Por ejemplo, una matriz que contiene 5 valores enteros de tipo int llamada foo podría representarse como:


donde cada panel en blanco representa un elemento de la matriz. En este caso, estos son valores de tipo int. Estos elementos están numerados del 0 al 4, siendo 0 el primero y 4 el último. En C ++, el primer elemento de una matriz siempre se numera con un cero (no uno), sin importar su longitud.

Como una variable regular, una matriz debe declararse antes de ser utilizada. Una declaración típica para una matriz en C ++ es:

tipo nombre [elementos]

donde type es un tipo válido (como int, float.), name es un identificador válido y el campo de elementos (que siempre está entre corchetes []), especifica la longitud de la matriz en términos del número de elementos.

Por lo tanto, la matriz foo, con cinco elementos de tipo int, se puede declarar como:

NOTA: El campo de elementos entre corchetes [], que representa el número de elementos de la matriz, debe ser un expresión constante, ya que las matrices son bloques de memoria estática cuyo tamaño debe determinarse en el momento de la compilación, antes de que se ejecute el programa.

Inicializando matrices

De forma predeterminada, las matrices regulares de alcance local (por ejemplo, los declarados dentro de una función) se dejan sin inicializar. Esto significa que ninguno de sus elementos se establece en un valor particular, su contenido está indeterminado en el punto en que se declara la matriz.

Pero los elementos de una matriz se pueden inicializar explícitamente a valores específicos cuando se declara, encerrando esos valores iniciales entre llaves <>. Por ejemplo:

Esta declaración declara una matriz que se puede representar así:


El número de valores entre llaves <> no debe ser mayor que el número de elementos de la matriz. Por ejemplo, en el ejemplo anterior, se declaró que foo tenía 5 elementos (según lo especificado por el número entre corchetes, []), y las llaves <> contenían exactamente 5 valores, uno para cada elemento. Si se declara con menos, los elementos restantes se establecen en sus valores predeterminados (que para los tipos fundamentales, significa que están llenos de ceros). Por ejemplo:

Creará una matriz como esta:


El inicializador incluso puede no tener valores, solo las llaves:

Esto crea una matriz de cinco valores int, cada uno inicializado con un valor de cero:


Cuando se proporciona una inicialización de valores para una matriz, C ++ permite la posibilidad de dejar los corchetes vacíos []. En este caso, el compilador asumirá automáticamente un tamaño para la matriz que coincida con el número de valores incluidos entre las llaves <>:

Después de esta declaración, la matriz foo tendría una longitud de 5 int, ya que hemos proporcionado 5 valores de inicialización.

Finalmente, la evolución de C ++ ha llevado a la adopción de inicialización universal también para matrices. Por lo tanto, ya no es necesario el signo igual entre la declaración y el inicializador. Ambas declaraciones son equivalentes:

Las matrices estáticas y las declaradas directamente en un espacio de nombres (fuera de cualquier función) siempre se inicializan. Si no se especifica un inicializador explícito, todos los elementos se inicializan por defecto (con ceros, para tipos fundamentales).

Accediendo a los valores de una matriz

Se puede acceder a los valores de cualquiera de los elementos de una matriz como al valor de una variable regular del mismo tipo. La sintaxis es:

nombre [índice]
Siguiendo los ejemplos anteriores en los que foo tenía 5 elementos y cada uno de esos elementos era de tipo int, el nombre que se puede utilizar para hacer referencia a cada elemento es el siguiente:


Por ejemplo, la siguiente declaración almacena el valor 75 en el tercer elemento de foo:

y, por ejemplo, lo siguiente copia el valor del tercer elemento de foo a una variable llamada x:

Por tanto, la expresión foo [2] es en sí misma una variable de tipo int.

Observe que el tercer elemento de foo se especifica foo [2], ya que el primero es foo [0], el segundo es foo [1] y, por lo tanto, el tercero es foo [2]. Por esta misma razón, su último elemento es foo [4]. Por lo tanto, si escribimos foo [5], estaríamos accediendo al sexto elemento de foo y, por lo tanto, excedimos el tamaño de la matriz.

En C ++, es sintácticamente correcto exceder el rango válido de índices para una matriz. Esto puede crear problemas, ya que acceder a elementos fuera de rango no causa errores en la compilación, pero puede causar errores en tiempo de ejecución. La razón por la que se permite esto se verá en un capítulo posterior cuando se introduzcan los indicadores.

En este punto, es importante poder distinguir claramente entre los dos usos que los corchetes [] tienen relacionados con las matrices. Realizan dos tareas diferentes: una es especificar el tamaño de las matrices cuando se declaran y la segunda es especificar índices para elementos concretos de la matriz cuando se accede a ellos. No confunda estos dos posibles usos de corchetes [] con matrices.

La principal diferencia es que la declaración está precedida por el tipo de elementos, mientras que el acceso no.

Algunas otras operaciones válidas con matrices:

Matrices multidimensionales

Las matrices multidimensionales se pueden describir como "matrices de matrices". Por ejemplo, una matriz bidimensional se puede imaginar como una tabla bidimensional formada por elementos, todos ellos del mismo tipo de datos uniformes.


jimmy representa una matriz bidimensional de 3 por 5 elementos de tipo int. La sintaxis de C ++ para esto es:

y, por ejemplo, la forma de hacer referencia al segundo elemento verticalmente y al cuarto horizontalmente en una expresión sería:


(recuerde que los índices de matriz siempre comienzan con cero).

Las matrices multidimensionales no se limitan a dos índices (es decir, dos dimensiones). Pueden contener tantos índices como sea necesario. Aunque tenga cuidado: la cantidad de memoria necesaria para una matriz aumenta exponencialmente con cada dimensión. Por ejemplo:

declara una matriz con un elemento de tipo char por cada segundo de un siglo. ¡Esto equivale a más de 3 mil millones de caracteres! ¡Entonces esta declaración consumiría más de 3 gigabytes de memoria!

Al final, los arreglos multidimensionales son solo una abstracción para los programadores, ya que se pueden lograr los mismos resultados con un arreglo simple, multiplicando sus índices:

Con la única diferencia de que con matrices multidimensionales, el compilador recuerda automáticamente la profundidad de cada dimensión imaginaria. Los siguientes dos fragmentos de código producen exactamente el mismo resultado, pero uno usa una matriz bidimensional mientras que el otro usa una matriz simple:

matriz multidimensionalmatriz pseudo-multidimensional

Ninguno de los dos fragmentos de código anteriores produce ningún resultado en la pantalla, pero ambos asignan valores al bloque de memoria llamado jimmy de la siguiente manera:


Tenga en cuenta que el código usa constantes definidas para el ancho y el alto, en lugar de usar directamente sus valores numéricos. Esto le da al código una mejor legibilidad y permite que los cambios en el código se realicen fácilmente en un solo lugar.

Matrices como parámetros

En algún momento, es posible que necesitemos pasar una matriz a una función como parámetro. En C ++, no es posible pasar todo el bloque de memoria representado por una matriz a una función directamente como argumento. Pero lo que se puede pasar en cambio es su dirección. En la práctica, esto tiene casi el mismo efecto y es una operación mucho más rápida y eficiente.

Para aceptar una matriz como parámetro para una función, los parámetros se pueden declarar como el tipo de matriz, pero con corchetes vacíos, omitiendo el tamaño real de la matriz. Por ejemplo:

Esta función acepta un parámetro de tipo "matriz de int" llamado arg. Para pasar a esta función una matriz declarada como:

bastaría con escribir una llamada como esta:

Aquí tienes un ejemplo completo:

En el código anterior, el primer parámetro (int arg []) acepta cualquier arreglo cuyos elementos sean de tipo int, cualquiera que sea su longitud. Por esa razón, hemos incluido un segundo parámetro que le dice a la función la longitud de cada matriz que le pasamos como su primer parámetro. Esto permite que el bucle for que imprime la matriz conozca el rango para iterar en la matriz pasada, sin salirse del rango.

En una declaración de función, también es posible incluir matrices multidimensionales. El formato de un parámetro de matriz tridimensional es:

Por ejemplo, una función con una matriz multidimensional como argumento podría ser:

Observe que los primeros corchetes [] se dejan vacíos, mientras que los siguientes especifican tamaños para sus respectivas dimensiones. Esto es necesario para que el compilador pueda determinar la profundidad de cada dimensión adicional.

En cierto modo, pasar una matriz como argumento siempre pierde una dimensión. La razón detrás es que, por razones históricas, las matrices no se pueden copiar directamente y, por lo tanto, lo que realmente se pasa es un puntero. Esta es una fuente común de errores para los programadores novatos. Aunque una comprensión clara de los indicadores, que se explica en un próximo capítulo, ayuda mucho.

Arreglos de biblioteca

Las matrices explicadas anteriormente se implementan directamente como una característica del lenguaje, heredada del lenguaje C. Son una gran característica, pero al restringir su copia y descomponerse fácilmente en punteros, probablemente sufren un exceso de optimización.

Para superar algunos de estos problemas con las matrices integradas en el lenguaje, C ++ proporciona un tipo de matriz alternativo como contenedor estándar. Es una plantilla de tipo (una plantilla de clase, de hecho) definida en header & ltarray & gt.

Los contenedores son una característica de la biblioteca que queda fuera del alcance de este tutorial y, por lo tanto, la clase no se explicará en detalle aquí. Baste decir que operan de manera similar a las matrices integradas, excepto que permiten ser copiadas (una operación realmente costosa que copia todo el bloque de memoria y, por lo tanto, usar con cuidado) y decaer en punteros solo cuando explícitamente le dijo que lo hiciera (mediante sus datos de miembro).

A modo de ejemplo, estas son dos versiones del mismo ejemplo que utilizan la matriz de lenguaje incorporada que se describe en este capítulo y el contenedor en la biblioteca:


Introducción

A menudo, cuando está tratando con datos, no tiene una cantidad fija de elementos. Tomemos, por ejemplo, un programa en el que se calcula el promedio de varias calificaciones en una clase:

¿Qué pasaría si quisiéramos que el programa también funcione cuando tenemos 3 grados?
Tendríamos que cambiar nuestro programa para trabajar con 3 grados.

Después de hacer esto, ya no funcionará con 2 grados. ¿Qué pasaría si quisiéramos que nuestro programa funcionara con cualquier número de grados entre 1 y 10 grados?

No es práctico escribir un programa separado para cada caso. Nos gustaría tener algo así como una lista de calificaciones. Esta lista contendría cualquier número de grados. Aquí es donde entran las matrices.

¿Qué es una matriz?

Una matriz es una colección ordenada que almacena varios valores del mismo tipo. Eso significa que una matriz de Int solo puede almacenar valores de Int. Y solo puede insertar valores Int en él.

Declaración de matrices

Para declarar una matriz, puede utilizar la sintaxis de corchetes ([Tipo]).

Puede inicializar una matriz con un literal de matriz. Un literal de matriz es una lista de valores, separados por comas, rodeados por un par de corchetes:

`Tenga en cuenta que puede crear matrices vacías si no escribe ningún valor.

Obteniendo valores

Para obtener todos los valores de una matriz, puede usar la sintaxis for-in. A esto se le llama iterar a través de una matriz.

Para obtener el número de elementos en una matriz, puede usar la propiedad count.

Puede acceder a elementos específicos de una matriz utilizando la sintaxis de subíndice. Para hacer esto, pase el índice del valor que desea recuperar entre corchetes inmediatamente después del nombre de la matriz. También puede obtener una subsecuencia de la matriz si pasa un rango en lugar de un índice.
Los elementos de una matriz se indexan de 0 al número de elementos menos uno. Entonces, una matriz con 3 elementos tendrá elementos en el índice 0, 1 y 2.

Añadiendo valores

Puede agregar elementos al final de una matriz utilizando el método append.

Para insertar un elemento en la matriz en un índice especificado, llame al método insert (at :) de la matriz.

También puede agregar otra matriz usando el operador + =.

Eliminar valores

Para eliminar un elemento de un índice específico, llame al método remove (at :).

Cambiar valores

Para cambiar un valor, use el operador de asignación (=) después de la sintaxis del subíndice.

O puede reemplazar una subsecuencia de valores usando subíndices de rango.

Tenga en cuenta que no necesita reemplazar una secuencia con otra secuencia con el mismo número de elementos. En el ejemplo anterior, los números tenían 6 elementos y después del reemplazo de la subsecuencia 2. 4 ([3, 4, 5]) tenía 5.

Inferencia de tipo

Gracias a la inferencia de tipos de Swift, no tiene que declarar el tipo de una matriz si la inicializa con algo que no sea un literal de matriz vacío ([]).

Copiar comportamiento

Los tipos de matriz de Swift se implementan como estructuras. Esto significa que las matrices se copian cuando se asignan a una nueva constante o variable, o cuando se pasan a una función o método.

Mutabilidad

Si crea una matriz y la asigna a una variable, la colección que se crea será mutable. Esto significa que puede cambiar (o mutar) la colección una vez creada. Los cambios se pueden realizar agregando, quitando o cambiando elementos en la colección. Por el contrario, si asigna una matriz a una constante, esa matriz es inmutable y su tamaño y contenido no se pueden cambiar. En otras palabras, si desea poder cambiar una matriz, declare usando la palabra clave var, y si no quiere poder cambiarla, use la palabra clave let.


6: matrices

HPE comprará Zerto por $ 374 millones y utilizará sus capacidades continuas de protección de datos para brindar recuperación ante desastres, respaldo y.

Los gerentes de continuidad del negocio deben estar preparados para cualquier cosa, y eso incluye entrevistas para el puesto. A continuación, se muestran algunos.

Un programa de capacitación de BCDR enseña a los empleados habilidades clave, como cómo realizar evaluaciones de riesgos y coordinar la respuesta de emergencia.

La copia de seguridad en espejo NAS es una forma útil de realizar copias de seguridad de los datos, pero conlleva desafíos, como el costo y la frecuencia de replicación de datos. Aprender .

Los proveedores de la nube ahora ofrecen compatibilidad con NAS, lo que brinda otra opción para la copia de seguridad de NAS. Sepa qué esperar al explorar NAS.

Catalogic CloudCasa ahora puede hacer copias de seguridad en lugar de solo instantáneas, lo que abre la puerta a una mejor capacidad de recuperación de ransomware y.

Las actualizaciones de hardware y software de Dell VxRail mejoran el rendimiento y facilitan la implementación y la administración, al tiempo que permiten la computación discreta.

La actualización de almacenamiento de VMware vSAN tiene como objetivo ayudar a las empresas a comenzar con una pequeña implementación de HCI. Los clientes obtienen la opción de conectarse.

SimpliVity ha agregado integración con HPE Cloud Volumes Backup y HPE StoreOnce para permitir una copia de seguridad más fácil en el borde, así como.


6: matrices

Sí, emprendí el ENORME proceso de construir una matriz de cuatro de los M-Squared de 50 'de largo 6M9KHW yagis - Recomiendo encarecidamente esta matriz como un tamaño "manejable de manera realista", pero con suficiente ganancia para realmente hacer el trabajo de manera efectiva. En el momento de su creación (27 de octubre de 2001), era el tercer conjunto de antenas de radioaficionado totalmente orientables más grande del mundo para esta banda de frecuencia. "¿Por qué es tan importante tener una antena totalmente orientable?", Podría preguntar.

Hay muy pocas estaciones DX de 6 m con capacidad de seguimiento EME, por lo que es ESENCIAL (en esta latitud de todos modos) tener una capacidad de elevación de hasta 65 grados. Con mi único yagi, solo puedo elevarme a 45 grados, lo cual es realmente desafortunado porque me faltaba la puesta de la luna de la UE en las mejores épocas del mes (que en 2001 coincidían con la declinación más al norte, ¡poniendo la luna MUY ALTA aquí!). La nueva matriz GLEAP es capaz de elevarse hasta alrededor de 70 grados antes de que las plumas transversales golpeen el motor montado en la parte trasera del mástil.

Es muy deseable tener al menos 1500W en 6m EME si desea tener éxito. Las condiciones en 6 m pueden ser MUY erráticas: es una banda terrible para EME. sin embargo, es la ÚNICA forma de trabajar cualquier DX de 6 m desde aquí en el "extremo norte geomagnético". Creo que si coloca una matriz como cuatro de los yagis 6M9KHW, también tendrá un sistema excelente para trabajar con otros tipos de propagación (si vive en un lugar que TIENE cualquier otro tipo de propagación). Y debería ser posible trabajar más fácilmente con estaciones DX en su puesta lunar con un amplificador de 6 my un solo yagi bueno.

La mayoría de las personas que han probado 6m EME y se han rendido debido a la falta de éxito y / o actividad han tenido muy poca ganancia de antena, por lo que se han visto severamente limitadas por la cantidad de estaciones más grandes que podían trabajar. Tenga en cuenta que incluso una matriz de cuatro bahías de yagis de 5 o 6 elementos solo tiene la misma cantidad de ganancia que mi yagi único 6M35WL / 6M11JKV, que considero que es el tamaño mínimo de antena para 6m EME. Con mi único yagi, SÍ escucho mis propios ecos cuando estoy apuntando hacia el cielo (sin ganancia de terreno) y las condiciones son óptimas (cielo de fondo tranquilo, luna cerca del perigeo, sin perturbaciones aurorales, etc.) pero el rendimiento es bastante errático. Sin embargo, al igual que en el EME de 2 m, existe un "punto mágico mínimo" en la ganancia de la antena en el que puede comenzar a tener un éxito razonable. y aumentar la ganancia por encima de ese punto aumenta drásticamente el número de estaciones con las que podrá contactar. La ganancia adicional de 4.5 dB de esta matriz de cuatro yagi mejora en gran medida la confiabilidad de los QSO de EME con otras estaciones más pequeñas.

Habiendo dicho todo eso sobre mi matriz, debo agregar ahora que ahora se pueden obtener resultados EME de 6 millones muy exitosos utilizando el modo JT65A y una matriz más pequeña. Realmente creo que una matriz de tamaño muy práctico para usar con éxito JT65A es una matriz de cuatro yagis 6M5X. Esta matriz de tamaño es muy simple de construir y elevar, y tiene aproximadamente la misma ganancia que mi yagi único, con el que escucho mis propios ecos mientras apunto hacia arriba. Siempre que tenga una ganancia de 14 o 15 dBd, una matriz orientable de este tipo no debería tener problemas para hacer contactos con estaciones más grandes de 6 m en CW, o con muchas estaciones en su horizonte usando JT65A. Sugiero construir una matriz de este tipo utilizando un "marco de doble H" de tubería de aluminio. Se podía montar muy convenientemente en una torre de 25 'de altura. Cuando se construyó esta matriz, solo estaba disponible el modo JT44 (el primer precursor de JT65A). Desde entonces, JT65A se ha convertido en el estándar mundial para contactos EME de 6 m.

La matriz fue diseñada para poder proporcionar una distancia de apilamiento de 31 '' de ancho x 29,5 'de alto, con el centro de la matriz a 32' sobre el nivel del suelo. Aquí está el rendimiento esperado de la matriz:

Patrón azimutal (cortesía de K0GU):


Patrón de elevación (cortesía de K0GU):

Mientras apunta hacia el horizonte, la nueva matriz parece tener más ganancia que el lóbulo de ganancia máxima de tierra del único 6M35WL / 6M11JKV a 70 ', en todo el rango de 2,5 a 9,5 grados de elevación. Por lo tanto, espero que tenga un muy buen desempeño cuando la luna está en el horizonte, así como también para su uso en ondas terrestres y durante las aperturas ionosféricas.

El espacio libre para la matriz se calculó usando mi antiguo programa de DOS "SPACE". A la derecha hay una copia impresa de ese programa, que muestra cómo se ve el espacio libre para esta matriz. Una versión de hoja de cálculo de Excel de este programa ahora está disponible de forma gratuita en mi sitio web AQUÍ.

Aunque hay cierta interacción del suelo con la matriz porque es muy baja, encuentro que funciona con mucho éxito cuando apunto directamente a la luna cuando está por encima de los 10 grados de elevación. Esa es también la elevación donde cae la mayor parte del ruido local. Como puede ver en la tabla a continuación, la distancia mínima al suelo cuando la matriz está elevada sigue siendo lo suficientemente alta como para despejar el cable mensajero con la línea de alimentación, así como la nieve profunda.

CÁLCULOS DE ESPACIO PARA UN ARREGLO DE CUATRO YAGIS 6M9KHW 6M EN W7GJ

ESPACIO HORIZONTAL ENTRE LA ALTURA DE LA TORRE = 32
MÁS EXTERIOR YAGIS = 31
ALTURA DE MÁSTIL VERTICAL DESDE
LONGITUD DEL MEDIO PIVOTE TRASERO HASTA EL YAGI MÁS BAJO = 14,75
DE CADA YAGI = 22.5
ALTURA DE MÁSTIL VERTICAL DESDE
LONGITUD DEL MEDIO PIVOTE DELANTERO HASTA EL YAGI MÁS ALTO = 14,75
DE CADA YAGI = 27
LONGITUD ÚLTIMO DIRECTOR = 8,7
POLARIZACIÓN = 0 GRADOS
LONGITUD DEL REFLECTOR = 9,75

La parte inferior de cada riostra tiene una barra de refuerzo que la atraviesa para unirla al concreto, y el extremo superior se sujeta con un solo perno grande, a través del riostra colocado en el centro de un canal de acero de 8 "de largo (que está atornillado a cada torre pierna) .Este es el mismo sistema de soporte que he usado durante décadas en mi matriz EME 16 yagi 2m. A continuación se muestran algunas fotos que muestran cómo se unen los tirantes a la torre:


La sección superior de la torre también fue agregada por mí solo, usando las líneas "skyhook". La foto de la izquierda me muestra encima de la torre completa, junto con las cuerdas de izado que cuelgan por encima.

El mástil es de acero de 1,5 "IPS cédula 40, con tubería de acero de 1,5" (pared de .120 ") soldada en su interior. Encima del mástil hay una pieza de 31" de largo de un eje de acero de 1-15 / 16 "soldado a un eje de 26" pieza de canal de acero de 6 "de ancho, reforzada por piezas de canal de acero de 3" de ancho, que se extienden hasta el mástil en un ángulo de 45 grados. Se suelda un ángulo de acero de 2 "x 2" en ambos lados de los extremos del eje y en la parte superior. Una placa de montaje de acero de 8 "x8" x1 / 8 "está soldada en la intersección de los tirantes y los mástiles. Esta placa de montaje, junto con una pieza grande de canal de aluminio de 6" de ancho, proporciona los puntos de conexión para el motorreductor de CC reversible (que requiere 200 VCC), caja de engranajes de reducción de ángulo recto y piñones tensores para la cadena de transmisión de elevación.

Estas fotos muestran el soporte en la parte superior de la torre, con la cubierta contra la intemperie quitada sobre el motorreductor, la caja de cambios y los piñones impulsores / tensores. La foto de la izquierda muestra la cadena de elevación y la antena instaladas. Un diagrama de la construcción del soporte se muestra en el documento que describe la construcción de mi marco doble H AQUÍ. Como se explica más adelante en esta página, utilicé torres de aluminio para las dos plumas transversales en la construcción del marco de doble H para esta matriz. En arreglos anteriores de 4 yagi más pequeños, solo usé tubos para los brazos cruzados.

La unidad utilizada tenía un accesorio de tubería soldado dentro de la rueda dentada motriz, por lo que se fabricó un acoplador de mástil para sujetarlo a este accesorio. Dentro del centro del engranaje cónico, se había soldado un adaptador de tubería (de casi el mismo diámetro que el interior del engranaje cónico), como puede ver en la foto superior a la derecha. Lo que decidí que sería más fácil de hacer sería conectar mi soporte a ese adaptador de tubería.

Como pueden ver en las fotos, corté con una sierra para metales y limé para crear dos caras planas en la brida de la tubería para poder colocar un ángulo de hierro de 2 "(pintado de marrón) contra esas partes planas en cada lado. Luego aseguré estas dos piezas de hierro en ángulo en los lados opuestos aplanados de la brida de la tubería con (3) pernos endurecidos de 3/8 "de diámetro. Los dos pernos exteriores rodean la brida de la tubería. El perno central se asienta en una ranura que limité en los dos bordes de la brida de la tubería, este perno central descansa en las ranuras, y las dos piezas de hierro de ángulo opuesto apretadas contra las caras aplanadas del adaptador de tubería, hacen que el conjunto de la brida quede muy bien asentado. para que NO se resbale.

Luego, en la parte superior de esta plataforma formada por las dos piezas de hierro en ángulo marrón, atornillé el conjunto de abrazadera del mástil amarillo, que se muestra en la foto de la izquierda. Se montó en las bridas angulares de color marrón para que el mástil estuviera centrado directamente sobre el centro del eje de paso de la hélice. La abrazadera de mástil amarilla se hizo en dos mitades. Cada mitad tiene un trozo de hierro en ángulo soldado a un trozo de placa de hierro. Luego se usaron abrazaderas de manguera para apretar las mitades de la abrazadera alrededor del mástil, y luego se atornilló el clmap a las bridas marrones.

Luego se fabricó un protector contra la intemperie cónico de chapa metálica y se instaló para cubrir la abrazadera y la placa de montaje. Para que coincida con las secciones de la torre, el XYL (el pintor oficial del proyecto) agregó el trabajo de pintura de camuflaje -) Luego sellé la parte superior con bridas de goma y plástico de la ferretería, que permiten que el mástil gire sin atascarse en el escudo de clima.

Aunque el soporte conectado al paso de hélice no puede deslizarse en absoluto, el mástil puede deslizarse dentro de la abrazadera. Dado que la matriz está atada cuando no está en uso, esta característica asegura que nada en el acoplamiento mecánico entre el motor y la antena se romperá. La indicación de azimut se obtiene acoplando la rotación del mástil a la rotación de un potenciómetro, utilizando correas de distribución, de modo que solo se muestre la posición real de la antena. Si se desea una conexión menos tolerante, se pueden instalar pernos a través de las abrazaderas amarillas y el mástil.

En 2011, el motor en el paso de hélice dejó de funcionar y lo reemplacé por un nuevo motor DC reversible separado. Se muestran los detalles de esta reparación AQUÍ. El motor de paso de hélice tarda en arrancar, pero se acelera cuando la antena comienza a girar. To minimize the mechanical shock on the mast-to-motor connection assembly, a transformer was selected to provide very low unfiltered voltage - around 22 VDC. In addition, resistors were added in the primary of the power supply, to slow the start-up of the rotation. The antenna now rotates at about 1 degree per second, which still provides some stress on the mast connector assembly when the antenna stops.



I am using 30'-2" long aluminum vertical masts for the yagis (constructed by using a center 20' long piece of 2" IPS schedule 40 6061-T6 PIPE, with 2" 6061-T6 TUBING, .125" wall, telescoped 11" inside it to lengthen each mast end an additional 5'-1"). These vertical mast materials are very stout and are standard sizes, available through most any supplier of aluminum. The 2" tubing fits quite easily inside the Schedule 40 Pipe (with .070" clearance), and a round shim for each of the four 12" long overlapping joints was made by forming a piece of 6.25"x14"x.020" aluminum to fit between the two members. Each joint was then bolted using two 3/8" hardened steel bolts and washers, oriented orthogonal to each other, and located 3" in from the end of each member (5" between the bolts).

The masts are rigidly braced from the center to the midpoints with 1.5" aluminum tubing, and also guyed out to the antenna mounting locations with 1/8" steel guy wire (supported by a 4' long length of 2"x2"x.125" aluminum angle, and supported with 1"x1"x.0625 wall square aluminum tubing). One of the mast splicing bolts was used, in conjunction with a U-Bolt, to secure the mounting bracket for attaching the rigid bracing. The masts are also braced sideways (at the antenna mounting bracket points) with Phyllistran cable. The masts were mounted so that the center of gravity the mast (when both upper and lower antennas with feedline attached) was in the center between the two horizontal towers.

The horizontal framework is a "Double H frame" using a total of eight 8' sections of Heights AC14-100 aluminum tower (for two 32' long towers), spaced approximately 2' on center from each other. I used a single 48' long piece of this in my 16 yagi 2m array, and it worked fine, but twisted slightly. The double H frame using that material, when properly guyed and supported, is far superior, very lightweight, and more than adequate (this array only weighs half as much as my 2m array). The length of the pair of assembled aluminum tower sections is actually 31'-8". The centers of the masts were each mounted 4.75" in from each end, with the antennas mounted on the outside of the masts. This resulted in a horizontal stacking distance of 31',4-7/8" between antenna centers, which was very close to the targeted 31.5'.

In the center of the array, 4" aluminum channel is run diagonally above and below the two horizontal towers, onto which the 1-15/16" pillow block bearings from the elevation mount are bolted. With this configuration of the double H frame and diagonal mounting, the center of gravity and pivot point is exactly in the center of the array. The entire properly balanced array is very easily elevated. A photo at the left shows one of the pillow blocks bolted onto the central elevation shaft (as viewed from below after the antenna was installed on the mount). Additional close-up photos of the vertical masts and the tower cross booms are also shown.

As is more apparent after the antenna is in the air (photo at lower right), the upper horizontal tower of the H frame assembly is mounted to the rear of the vertical aluminum support masts. The lower tower is mounted to the front of the vertical masts. There are a pair of 5' long vertical aluminum masts similarly mounted between the two towers (immediately adjacent to the central support channels) used to support the 3/8" heavy duty Phyllistran cables from the center of the array out to the ends of the horizontal members of the H frames (to prevent sagging of the H frame when the array is pointed at the horizon).

The array is also braced out the front, from a center point with cables running out to the end of each bracket where the tower is attached to the main vertical masts (to keep the frame from sagging when the array is elevated).

As shown in the bottom photo at the left, the weighted precision 3 turn elevation potentiometer that is used for elevation readout is mounted in a pair of metal film canisters. Nylon cable ties hold the assembly inside the lower tower section next to the mount.

Side-to-side bracing is provided to prevent the yagis from flopping over while elevated, although subsequent builders of this same array have not found this necessary. This bracing was done through the use of 1/8" diameter Phyllistran cable, run just underneath the elements on each yagi, from the boom to a fiberglass cross member mounted near the center of each yagi. The 8' long pieces of fiberglass poles were cut from broken pole vaulting crossbars (acquired through the courtesy from The University of Montana track and field athletic department). Plugs were put into the ends of the fiberglass poles so the U bolts holding the angle aluminum mounting brackets (for the Phyllistran cable turnbuckles) would not crack the fiberglass. The plugs were standard nylon fittings for bed casters (there is quite a size selection of these at the local hardware store). The fiberglass poles were lightly sanded, cleaned, and painted with three coats of white paint formulated for use on fiberglass (expensive, but also available from the local ACE hardware store). The paint used was "Marine Topside Polyurethane Enamel" by Valspar Corporation.

The antennas came with dacron ropes to support the booms from a temporary 24" high central support post that needs to be clamped to mast after the antennas are mounted. Galvanized 1/8" steel guy cable was substituted for the dacron line, and 25.75" long pieces of 1.25"x1.25"x.125" square aluminum tubing were bolted to the small guy support on each of the top two yagis. This extension of square aluminum tubing (weighing 1.35 pounds) makes a tight fit extending 4.25" down inside (past the top three mounting clamps - see photo) the tops of the round 2" masts (1.75" ID), and provides adequately stiff, permanent support for the boom guys.

The correct M2 T match and mounting block assemblies for the driven elements are 25" overall length (the T match rod extends out 11.5" on each side of the machined connector block). I mention this only because it is not mentioned anywhere in the assembly directions or specifications sheet, and I initially had no idea that all four of mine came to me the wrong length. I cut them back to the lengths mentioned above, and secured the shorting bars to the driven element (at a distance 10.5" from the edge of the connector mounting block to the center of the shorting bar). When mounting the shorting bars, I first put "permatrox" on the aluminum-to-aluminum connections, and coated the shorting bar set screws with Locktite. All the coaxial connections and places where penetrations are made to the machined connector block are sealed with non contaminating silicone caulking. NOTA: More recent M 2 6M9KHW yagis have been manufactured using a split dipole with a hairpin match.

The balance point for the yagi of course depends on the particular feedline and support systems used. For my yagis, the balance point was 20'-1/2" from the end of the N connector on the DE feed block. By bending the feedline away from the mast at a point 30" from the center of the yagi, approximately 19' of LMR feedline weight is added to each yagi. The completed, trussed up yagi (less feedline) weighed in at approximately 49 pounds.


With the extra electrical lengths inside the power divider and the two N chassis connectors, it was estimated that the actual overall length would be 2.5 wavelengths just under 50.100 MHz.

The 4 way 1/2 wavelength power divider was built from 1.25" OD square aluminum tubing with a .125" wall thickness. The inner conductor was 15/32" OD round hobby brass tubing, creating a line impedance of 50 ohms. Four .375" thick teflon spacers were evenly spaced at approximately 20" intervals (between the spacers or RF connections) through the inside of the square tubing, to keep the center conductor supported and centered. The overall length of the aluminum tubing for the power divider was 10', with 57.75" (using a velocity factor of .98) from the center connector to the point where each pair of N connectors were connected. (Next time I suggest using a velocity factor of .975, since the low end of the 6m band was just on the upper end of the bandwidth for a perfect match with the device built as described above). The estimated loss for half of the power divider is less than 0.02 dB . The connector for the main feedline was a 7/16 connector, to insure plenty of extra durability in terms of handling RF power. The flexible coax around the rotator was LMR600 ultraflex, with 7/16 DIN connectors on both ends ( 0.1 dB ).

Initially, 3/4" diameter 75 ohm CATV hardline was used for the feedline, which required an impedance transformation. This was achieved by constructing an "L/12" impedance transformer and mounting it at the top of the tower. The transformer was designed around 1.25" OD (1" ID) square aluminum tubing (the outer conductor, sized to accomodate the connectors selected), with appropriately sized hobby tubing to construct the required 50 and 75 ohm sections. The 75 ohm section (toward the 50 ohm antenna) was an 18.75" long piece of 5/16" diameter tubing the 50 ohm section (toward the 75 ohm feedline) was an 18.75" long piece of 15/32" diameter tubing. A single teflon spacer was used at the center where the tubing sizes changed. At the antenna end (to connect to the 50 ohm LMR 600 Ultraflex), a 7/16 DIN female chassis connector was mounted to the square aluminum tubing of the transformer. On the feedline end (to connect to the 3/4" CATV 75 ohm hardline), a male HN connector was mounted to the transformer. The feedline to the shack is 200' long.

In the shack, a traditional 1/4 wavelength long coaxial impedance transformer (of 61.5 ohms) was used to convert the 75 ohm CATV hardline back to 50 ohms. I constructed mine from 1" "Type M" copper tubing (OD=1.125", with a 57.6" long piece of 3/8" OD hobby tubing as the center conductor.

The 75 ohm CATV hardline was later replaced with 1-5/8 Heliax and the impedance transformers at both ends of the feedline run were bypassed. Total loss for the 200' of Heliax (with 7/16 DIN connectors on both ends), is 0.4 dB , resulting in less than 0.75 dB total line loss to the low noise preamp in the shack.


The H Frame was first raised up and hung against the tower so the bottoms of the vertical masts just cleared the ground. Even so, the sign company ladder truck could not reach up high enough to raise the antennas up to the tops of the top of the masts (around 32'). Therefore a crane was used to raise the antennas into place, and the bucket on the ladder truck was used to stand in and reach up to tighten the boom-to-mast clamps on the upper antennas.

The lower antennas of course were within easy reach of the ground, and were mounted by hand. The crane was then used to raise the complete array up to the top of the tower, where the H frame was bolted to the pillow block bearings on each end of the central support shaft of the elevation mount.

Power supplies to run power the elevation and prop-pitch motors, along with relays to enable actuation from the house, were enclosed in a waterproof plastic box mounted on the bottom of the tower. A messenger cable (low to permit clearance of the yagi reflectors when the array is pointed up at the moon) carries the feedline , AC power cord, and 8 conductor control cable from the house.

The main tie-down ropes are 4 nylon lines attached to the center of the two vertical masts. "S" hooks were also mounted in the bottoms of the masts so 4 more secondary stabilization lines could be easily hooked on (by reaching up with a 15' long aluminum pole) when especially severe winds are anticipated. From experience with my 2m EME array, it was found that tie downs attached only to the central horizontal boom do resist winds trying to rotate the antenna in azimuth, but the "rocking" effect from forces acting on the elevation mechanism can completely destroy the coupling there. By also using tie-downs on the bottoms of the masts, such forces acting against the elevation mechanism can be limited.

A more detailed description how how the array is tied down (excerpted from the overall W7GJ 6m EME Station Operation manual) is HERE.

The VSWR of the antenna is nearly perfect between 50.100 and 5.200 MHz, showing only a few watts reflected with 1500 watts forward. During the first weekend of testing, echoes off the moon were present over half the time, and moonset signals from the 9G5AN DXpedition in October 2001 were detected on almost every transmission they made. The charts at the top of the page indicate a beamwidth of about 10 degrees down to the 1 db point although this may seem extraordinarily sharp to 6m operators used to being able to watch a very wide range of azimuths for incoming DX signals, it sure seems very comfortably broad for EME (at least compared to my 16 yagi array on 2m)! Before I had the indicators and remote controls set up, I was limited to visual aiming, and I confirmed that the antenna seemed to work fine as long as I went out to move it every 30 to 45 minutes! Even pointed through the trees at moonrise, echoes are quite good, and the antenna seems to perform noticeably better than the single 70' long yagi at the 70' height, at least between 90 and 235 degrees azimuth. Aiming the antenna at northern cold sky produces a noise of 2.5 dB, compared to a 50 ohm load here in the shack.

More testing will be necessary to confirm, but the initial comparisons show that the single yagi works better in directions (such as Japan), where the lower yagis are essentially at ground level within a dozen wavelengths, due to local topography. In other directions in which the EME array has a clearer shot ( such as toward the Caribbean), the EME array is clearly a better performer. A chart of the horizon provides a more complete picture of some of the VHF challenges of living in the northern Rocky Mountains! The antenna is normally tied down at 110 degrees, which is aimed at Missouri (1xEs), Georgia (2xEs) and eastern Caribbean (F2). It has been very helpful to use the single big yagi at 70' to locate DX stations, and then bring the GLEAP array around to the proper azimuth when a few extra dB is necessary. Hope to contact you with it soon!


6: Arrays

HPE will buy Zerto for $374 million and use its continuous data protection capabilities to bring disaster recovery, backup and .

Business continuity managers must be ready for anything, and that includes interviewing for the role. Here are some common .

A BCDR training program teaches employees key skills, such as how to conduct risk assessments, coordinate emergency response with.

NAS mirror backup is a useful way to back up data, but comes with challenges, such as cost and data replication frequency. Learn .

Cloud providers now offer NAS compatibility, which gives another option for NAS backup. Know what to expect when exploring NAS .

Catalogic CloudCasa can now do backups instead of just snapshots, opening the door to better ransomware recoverability and .

Dell VxRail hardware and software updates improve performance and ease deployment and management, while enabling discrete compute.

The VMware vSAN storage update aims to help enterprises start with a small HCI deployment. Customers gain the option to connect .

SimpliVity has added integration with HPE Cloud Volumes Backup and HPE StoreOnce to enable easier backup at the edge, as well as .


Initializing Arrays:

Or, we could simply initialize the variable in the declaration statement itself:

Can we do the same for arrays? Yes, for the built-in types. Simply list the array values (literals) in set notation < >after the declaration. Aquí hay unos ejemplos:

C-style strings

  • We use strings frequently, but there is no built-in string type in the language
  • A C-style string is implemented as an array of type carbonizarse that ends with a special character, called the "null character".
    • The null character has ASCII value 0
    • The null character can be written as a literal in code this way: ''

    Since character arrays are used to store C-style strings, you can initialize a character array with a string literal (i.e. a string in double quotes), as long as you leave room for the null character in the allocated space.

    Notice that this would be equivalent to:

    Variations in initializing

    Array declarations deber contain the information about the size of the array. It is possible to leave the size out of the [ ] in the declaration as long as you initialize the array inline, in which case the array is made just large enough to capture the initialized data. Ejemplos:

    Another shortcut with initializer sets is to use fewer elements than the size specifies. Remaining elements will default to 0. It is illegal to use a set containing más elements than the allocated size.

    Note: Using initializers on the declaration, as in the examples above, is probably not going to be as desirable with very large arrays.
    Another common way to initialize an array -- with a por loop:
    This example initializes the array numList to <0, 2, 4, 6, 8, 10, 12, 14, 16, 18>.


    8.15.6. Array Input and Output Syntax

    The external text representation of an array value consists of items that are interpreted according to the I/O conversion rules for the array's element type, plus decoration that indicates the array structure. The decoration consists of curly braces ( <y >) around the array value plus delimiter characters between adjacent items. The delimiter character is usually a comma (,) but can be something else: it is determined by the typdelim setting for the array's element type. Among the standard data types provided in the PostgreSQL distribution, all use a comma, except for type box, which uses a semicolon (). In a multidimensional array, each dimension (row, plane, cube, etc.) gets its own level of curly braces, and delimiters must be written between adjacent curly-braced entities of the same level.

    The array output routine will put double quotes around element values if they are empty strings, contain curly braces, delimiter characters, double quotes, backslashes, or white space, or match the word NULO. Double quotes and backslashes embedded in element values will be backslash-escaped. For numeric data types it is safe to assume that double quotes will never appear, but for textual data types one should be prepared to cope with either the presence or absence of quotes.

    By default, the lower bound index value of an array's dimensions is set to one. To represent arrays with other lower bounds, the array subscript ranges can be specified explicitly before writing the array contents. This decoration consists of square brackets ([]) around each array dimension's lower and upper bounds, with a colon (:) delimiter character in between. The array dimension decoration is followed by an equal sign (=). Por ejemplo:

    The array output routine will include explicit dimensions in its result only when there are one or more lower bounds different from one.

    If the value written for an element is NULO (in any case variant), the element is taken to be NULL. The presence of any quotes or backslashes disables this and allows the literal string value "NULL" to be entered. Also, for backward compatibility with pre-8.2 versions of PostgreSQL , the array_nulls configuration parameter can be turned off to suppress recognition of NULO as a NULL.

    As shown previously, when writing an array value you can use double quotes around any individual array element. You must do so if the element value would otherwise confuse the array-value parser. For example, elements containing curly braces, commas (or the data type's delimiter character), double quotes, backslashes, or leading or trailing whitespace must be double-quoted. Empty strings and strings matching the word NULO must be quoted, too. To put a double quote or backslash in a quoted array element value, precede it with a backslash. Alternatively, you can avoid quotes and use backslash-escaping to protect all data characters that would otherwise be taken as array syntax.

    You can add whitespace before a left brace or after a right brace. You can also add whitespace before or after any individual item string. In all of these cases the whitespace will be ignored. However, whitespace within double-quoted elements, or surrounded on both sides by non-whitespace characters of an element, is not ignored.

    Consejo: La ARRAY constructor syntax (see Section 4.2.12) is often easier to work with than the array-literal syntax when writing array values in SQL commands. En ARRAY, individual element values are written the same way they would be written when not members of an array.


    Ver el vídeo: The Matrix Trilogy in Six Minutes (Septiembre 2021).