> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Trabajo con colecciones

> Tres tipos de colecciones de ABBYY FineReader Engine: colecciones temporales, colecciones de objetos secundarios y colecciones de solo lectura de objetos secundarios, y cómo usar cada una.

<Note>
  Los ejemplos de C# y la información correspondiente se aplican solo a FRE for Windows.
</Note>

Hay tres tipos principales de colecciones en ABBYY FineReader Engine:

* colecciones temporales (colecciones de referencias a objetos existentes)
* colecciones de objetos secundarios
* colecciones de solo lectura de objetos secundarios

En esta página, puede encontrar información sobre lo siguiente:

* cómo trabajar con cada tipo de colección

* cómo ver la lista de todas las colecciones disponibles

* cómo trabajar con colecciones en .NET en FRE for Windows

<div id="temporary-collections">
  ## Colecciones temporales
</div>

Este tipo de colección representa un conjunto de referencias a objetos existentes. Son colecciones temporales; por lo general, se usan para pasar distintos conjuntos de parámetros a métodos que los requieren. Se crea la colección, se le agregan elementos (como referencias a objetos existentes), se pasa al método requerido y luego se destruye, mientras que los objetos agregados a ella permanecen. Estas colecciones llevan el sufijo Collection en sus nombres (por ejemplo, StringsCollection, IntsCollection).

Para trabajar con una colección de este tipo:

1. Cree la colección mediante el método de creación correspondiente del objeto [Engine](/es/fine-reader/engine/api-reference/engine-object-iengine-interface). Por ejemplo, para el objeto IntsCollection, es el método [CreateIntsCollection](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods). Estas colecciones también pueden ser valores de retorno de algunos métodos.
2. Agregue objetos existentes a la colección mediante su método [Add](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/add-method). Puede recorrer la colección mediante su propiedad Count, que es de solo lectura, la propiedad [Element](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/element-property), que es de lectura y escritura, y el método [Item](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/item-method). La primera obtiene el número de elementos realmente contenidos en la colección; la segunda y el tercero proporcionan acceso al elemento en el índice especificado. La propiedad Element le permite acceder a un elemento de la colección mediante el operador \[] en C#.
3. Si es necesario, modifique la colección mediante otros métodos de la colección: [InsertAt](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/insertat-method), [DeleteAt](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteat-method) y [DeleteAll](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteall-method).
4. Pase la colección al método que la requiere como parámetro.

Un ejemplo de uso del objeto IntsCollection en C#:

<Accordion title="Código C#">
  ```csharp theme={null}

  for( int i = 0; i < Document.Pages.Count; i++ )
  {
   if( Document.Pages[i].PageStructureOutOfDate )
   {
    pageIndices.Add( i );
   }
  }
  // Pasa la colección creada de índices de página a un método de procesamiento
  if( pageIndices.Count > 0 || Document.DocumentStructureOutOfDate )
  {
   Document.SynthesizePages( pageIndices, null );
  }
  ```
</Accordion>

<div id="collections-of-child-objects">
  ## Colecciones de objetos secundarios
</div>

Otro tipo representa una colección de objetos secundarios de un objeto principal. Estas colecciones existen mientras exista su objeto principal. A través de estas colecciones, puede agregar o quitar objetos secundarios del objeto principal. Cuando agrega un elemento a la colección, se crea internamente un objeto nuevo y luego se agrega a la colección. Ejemplos de estas colecciones: DictionaryDescriptions, una colección de objetos de descripción de diccionario; BaseLanguages, una colección de idiomas base.

Para usar estas colecciones:

1. Obtenga la colección mediante la propiedad de su objeto principal. Por ejemplo, si desea acceder a la colección de idiomas base de un idioma de reconocimiento, use la propiedad [DictionaryDescriptions](/es/fine-reader/engine/api-reference/language-related-objects/baselanguage#dictionarydescriptions) del objeto BaseLanguage.
2. Recorra la colección mediante las propiedades de solo lectura Count y [Element](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/element-property), y el método [Item](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/item-method). La primera obtiene el número de elementos que contiene realmente la colección; la segunda y la tercera obtienen el elemento en el índice especificado. La propiedad Element le permite acceder a un elemento de la colección mediante el operador \[] en C#.
3. Si es necesario, agregue nuevos elementos a la colección mediante su método AddNew. Los métodos AddNew de distintas colecciones pueden tener una sintaxis ligeramente distinta, pero todos hacen lo mismo: crean un nuevo elemento de la colección y lo agregan a ella. Puede eliminar elementos mediante los métodos [DeleteAt](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteat-method) y [DeleteAll](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteall-method).

Un ejemplo de cómo trabajar con el objeto DictionaryDescriptions en C#:

<Accordion title="Código C#">
  ```csharp theme={null}
  FREngine.IEngine Engine = null;
  FREngine.IBaseLanguage baseLanguage = null;
  // Inicialice Engine y obtenga un idioma base de un idioma de texto
  ...
  // Obtenga la colección de descripciones de diccionario de un idioma base y elimine todos los elementos
  IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;
  dictionaryDescriptions.DeleteAll();
  // Cree una descripción de diccionario de usuario y agréguela a la colección
  IDictionaryDescription dictionaryDescription = dictionaryDescriptions.AddNew( DictionaryTypeEnum.DT_UserDictionary );
  ```
</Accordion>

<div id="read-only-collections">
  ## Colecciones de solo lectura
</div>

Algunas colecciones de objetos secundarios son de solo lectura. Esto significa que no tienen métodos de edición; solo puede iterarlas y ver sus elementos. Ejemplos de estas colecciones son: PredefinedLanguages – una colección de idiomas predefinidos; Paragraphs – una colección de párrafos de un texto.

Para ver los elementos de estas colecciones:

1. Obtenga la colección a través de la propiedad de su objeto principal. Por ejemplo, si quiere acceder a la colección de párrafos de un texto, use la propiedad [Paragraphs](/es/fine-reader/engine/api-reference/text-related-objects/text#paragraphs) del objeto Text.
2. Recorra la colección mediante las propiedades de solo lectura Count y [Element](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/element-property), y el método [Item](/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/item-method). La primera devuelve la cantidad de elementos que contiene realmente la colección; la segunda y la tercera devuelven el elemento en el índice especificado. La propiedad Element le permite acceder a un elemento de la colección mediante el operador \[] en C#.

Un ejemplo de trabajo con el objeto Paragraphs en C#:

<Accordion title="Código C#">
  ```csharp theme={null}
  FREngine.IEngine Engine = null;
  FREngine.IBlock block = null;
  // Inicialice Engine, reconozca un documento y obtenga un bloque de texto de un layout
  ...
  FREngine.ITextBlock textBlock = block.GetAsTextBlock();
  // Recorra los párrafos del texto del bloque
  int paragraphsCount = textBlock.Text.Paragraphs.Count;
  for (int iPar = 0; iPar < paragraphsCount; iPar++)
  {
   FREngine.IParagraph par = textBlock.Text.Paragraphs[iPar];
   string text = par.Text;
  }
  ```
</Accordion>

<div id="all-available-collections">
  ## Todas las colecciones disponibles
</div>

A continuación, se incluye la lista completa de las colecciones disponibles en FineReader Engine. Algunas colecciones ofrecen métodos adicionales para trabajar con elementos. Consulte la tabla siguiente para ver los detalles.

<table>
  <thead>
    <tr>
      <th>
        <p>
          <strong>Colecciones de objetos hijo</strong>
        </p>
      </th>

      <th>
        <p>
          <strong>Colecciones de solo lectura</strong>
        </p>
      </th>

      <th>
        <p>
          <strong>Colecciones temporales</strong>
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <ul>
          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-related-objects/authorslist">AuthorsList</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/language-related-objects/baselanguages">BaseLanguages</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/classification-related-objects/categories">Categories</a>
            </strong>

            {" "}

            – esta colección cuenta con un método adicional <strong>Find</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup">CheckmarkGroup</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/classification-related-objects/classificationobjects">ClassificationObjects</a>
            </strong>

            {" "}

            – esta colección cuenta con un método adicional <strong>Find</strong>, mientras que el método <strong>AddNew</strong> es reemplazado por el método <strong>Add</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/language-related-objects/dictionarydescriptions">DictionaryDescriptions</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-related-objects/documentinformationdictionary">DocumentInformationDictionary</a>
            </strong>

            {" "}

            – esta colección es también un diccionario, por lo que la propiedad <strong>Element</strong> es reemplazada por la propiedad <strong>Value</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-related-objects/frpages">FRPages</a>
            </strong>

            {" "}

            – esta colección de objetos hijo difiere de otras del mismo tipo. No cuenta con el método <strong>AddNew</strong>; en su lugar, puede utilizarse el método <strong>AddPage</strong> del
            objeto padre <strong>FRDocument</strong>. Tampoco cuenta con el método <strong>DeleteAll</strong>, pero incluye los métodos adicionales <strong>IndexOf</strong>, <strong>Remove</strong> y{" "}
            <strong>Swap</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/layout-related-objects/layoutblocks">LayoutBlocks</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/list">List</a>
            </strong>

            {" "}

            – esta colección no cuenta con el método <strong>DeleteAt </strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-related-objects/pdfattachments">PDFAttachments</a>
            </strong>

            {" "}

            – esta colección cuenta con los métodos <strong>AddFromFile </strong><strong> </strong>y <strong>AddFromMemory</strong> (Windows) en lugar del método <strong>AddNew</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/parameter-objects/export-parameters/pdfpictures">PDFPictures</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/layout-related-objects/separatorgroup">SeparatorGroup</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/layout-related-objects/tableseparators">TableSeparators</a>
            </strong>

            {" "}

            – esta colección cuenta con un método adicional <strong>IndexOf</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/tabpositions">TabPositions</a>
            </strong>
          </li>
        </ul>
      </td>

      <td>
        <ul>
          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/barcodetext">BarcodeText</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-related-objects/businesscards">BusinessCards</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/document-comparison-objects/changes">Changes</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/characterrecognitionvariants">CharacterRecognitionVariants</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/classification-related-objects/classificationresults">ClassificationResults</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/language-related-objects/detectedlanguages">DetectedLanguages</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/language-related-objects/fuzzystrings">FuzzyStrings</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/license-related-objects/licenses">Licenses</a>
            </strong>

            {" "}

            – esta colección incluye el método adicional <strong>Find</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/paragraphlines">ParagraphLines</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/paragraphs">Paragraphs</a>
            </strong>

            {" "}

            – esta colección incluye el método adicional <strong>IndexOf</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/language-related-objects/predefinedlanguages">PredefinedLanguages</a>
            </strong>

            {" "}

            – esta colección incluye el método adicional <strong>Find</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/mechanism-objects/scansources">ScanSources</a> (Windows)
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/splitregions">SplitRegions</a>
            </strong>

            {" "}

            – esta colección incluye el método adicional <strong>GetSourcePageIndex</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/layout-related-objects/tablecells">TableCells</a>
            </strong>

            {" "}

            – esta colección incluye los métodos adicionales <strong>IndexOf</strong>, <strong>Merge</strong> y <strong>Split</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/classification-related-objects/trainingresults">TrainingResults</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/wordrecognitionvariants">WordRecognitionVariants</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/text-related-objects/words">Words</a>
            </strong>
          </li>
        </ul>
      </td>

      <td>
        <ul>
          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/stringscollection">StringsCollection</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/intscollection">IntsCollection</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/image-related-objects/officeconverters">OfficeConverters</a>
            </strong>

            {" "}

            (solo para Linux y Windows) – Esta colección se diferencia de todas las demás en que contiene constantes de enumeración, no objetos. También tiene un método adicional, <strong>Find</strong>.
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/image-related-objects/trainingimagescollection">TrainingImagesCollection</a>
            </strong>
          </li>

          <li>
            <strong>
              <a href="/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/regionscollection">RegionsCollection</a>
            </strong>
          </li>

          <li>
            <strong>Visual Components:</strong>

            <ul>
              <li>
                <strong>
                  <a href="/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection">SpellWordCollection</a>
                </strong>
              </li>

              <li>
                <strong>
                  <a href="/es/fine-reader/engine/visual-components-reference/supplementary-objects/spellreplacementcollection">SpellReplacementCollection</a>
                </strong>
              </li>

              <li>
                <strong>
                  <a href="/es/fine-reader/engine/visual-components-reference/supplementary-objects/toolbar">Toolbar</a>
                </strong>

                {" "}

                – esta colección tiene métodos adicionales, <strong>Delete</strong> y <strong>Has</strong>.
              </li>

              <li>
                <strong>
                  <a href="/es/fine-reader/engine/visual-components-reference/supplementary-objects/popupmenu">PopupMenu</a>
                </strong>

                {" "}

                – esta colección tiene métodos adicionales, <strong>Delete</strong> y <strong>Has</strong>, y las propiedades <strong>CustomMenuEnabled</strong> y <strong>StandardMenuEnabled</strong>.
              </li>
            </ul>
          </li>
        </ul>
      </td>
    </tr>
  </tbody>
</table>

<div id="working-with-collections-in-net">
  ## Trabajar con colecciones en .NET
</div>

Todas las interfaces de colección derivan de la interfaz IEnumerable. Esto significa que puede usar la instrucción foreach en C# (for each en Visual Basic) para trabajar con colecciones. Tenga en cuenta que el uso de foreach con colecciones tiene algunas particularidades; por ejemplo, los enumeradores no se pueden usar para modificar la colección, sino solo para leer los datos que contiene. Consulte los comentarios en [msdn.microsoft.com](http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx).

Un ejemplo de uso de foreach con la colección FRPages en C#:

<Accordion title="C# code">
  ```csharp theme={null}
  FREngine.IFRDocument document;
  // Suponemos que el documento contiene algunas páginas
  ...
  foreach( FREngine.IFRPage page in document.Pages ) {
   // hacer algo con la página
  }
  ```
</Accordion>
