Exemplo n.º 1
0
 public PrimitiveColumn <T> Clone(PrimitiveColumn <long> mapIndices = null, bool invertMapIndices = false)
 {
     if (mapIndices is null)
     {
         PrimitiveColumnContainer <T> newColumnContainer = _columnContainer.Clone();
         return(new PrimitiveColumn <T>(Name, newColumnContainer));
     }
     else
     {
         if (mapIndices.Length != Length)
         {
             throw new ArgumentException(Strings.MismatchedColumnLengths, nameof(mapIndices));
         }
         PrimitiveColumn <T> ret = new PrimitiveColumn <T>(Name);
         if (invertMapIndices == false)
         {
             for (long i = 0; i < mapIndices.Length; i++)
             {
                 ret.Append(_columnContainer[mapIndices._columnContainer[i]]);
             }
         }
         else
         {
             for (long i = Length - 1; i >= 0; i--)
             {
                 ret.Append(_columnContainer[mapIndices._columnContainer[i]]);
             }
         }
         return(ret);
     }
 }
Exemplo n.º 2
0
 public PrimitiveColumn <T> Clone(PrimitiveColumn <long> mapIndices = null, bool invertMapIndices = false)
 {
     if (mapIndices is null)
     {
         PrimitiveColumnContainer <T> newColumnContainer = _columnContainer.Clone();
         return(new PrimitiveColumn <T>(Name, newColumnContainer));
     }
     else
     {
         if (mapIndices.Length > Length)
         {
             throw new ArgumentException(Strings.MapIndicesExceedsColumnLenth, nameof(mapIndices));
         }
         PrimitiveColumn <T> ret = new PrimitiveColumn <T>(Name, mapIndices.Length);
         ret._columnContainer._modifyNullCountWhileIndexing = false;
         if (invertMapIndices == false)
         {
             for (long i = 0; i < mapIndices.Length; i++)
             {
                 T?value = _columnContainer[mapIndices._columnContainer[i].Value];
                 ret[i] = value;
                 if (!value.HasValue)
                 {
                     ret._columnContainer.NullCount++;
                 }
             }
         }
         else
         {
             long mapIndicesIndex = mapIndices.Length - 1;
             for (long i = 0; i < mapIndices.Length; i++)
             {
                 T?value = _columnContainer[mapIndices._columnContainer[mapIndicesIndex - i].Value];
                 ret[i] = value;
                 if (!value.HasValue)
                 {
                     ret._columnContainer.NullCount++;
                 }
             }
         }
         ret._columnContainer._modifyNullCountWhileIndexing = true;
         return(ret);
     }
 }