public static string[] Compress(string[] uncompressed)
{
if (uncompressed == null) throw new ArgumentNullException("uncompressed");
var compressed = new List<string>();
var compressedIndex = 0;
for (var i = 0; i < uncompressed.Length; i++)
{
var value = uncompressed[i];
if (!String.IsNullOrWhiteSpace(value))
{
if (i == compressedIndex)
{
compressed.Add(value);
compressedIndex++;
}
else
{
compressed.Add(i + 1 + "!" + value);
compressedIndex = i + 1;
}
}
}
return compressed.ToArray();
}