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); } }
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); } }