2012-07-19 122 views
1

我目前有一個鋸齒陣列Class[][][],我想將其作爲正常Class[]數組序列化,然後在反序列化後轉換回Class[][][]數組。完全可以在兩種方式之間進行轉換嗎?尺寸大小不變。將C#鋸齒陣列轉換爲數組,然後再返回

+2

你需要以某種方式REM如果你想能夠重建原始結構,就會嵌入各種大小的鋸齒狀「比特」。 – Rawling 2012-07-19 10:47:06

+0

當然......這是可能的。我不確定你想要這樣做的原因,將其序列化到你想存儲它的方式要容易得多(在這種情況下,你想把它作爲一個鋸齒形數組存儲)。 – 2012-07-19 11:02:43

+0

@Ramhound我正在使用的單聲道的實現越來越困惑,當我嘗試和序列化鋸齒陣列,但似乎沒有平面陣列的問題 – RSH1 2012-07-19 11:06:04

回答

2

如果你不介意的序列化扁平陣列 int數組,你可以使用以下命令:

public static int[] JaggedSizes<T>(this T[][][] topArray) 
{ 
    List<int> rtn = new List<int>(); 
    rtn.Add(topArray.Length); 
    for (int i = 0; i < topArray.Length; i++) 
    { 
     var midArray = topArray[i]; 
     rtn.Add(midArray.Length); 
     for (int j = 0; j < midArray.Length; j++) 
     { 
      var botArray = midArray[j]; 
      rtn.Add(botArray.Length); 
     } 
    } 
    return rtn.ToArray(); 
} 

// Thanks @Dave Bish 
public static T[] ToFlat<T>(this T[][][] jagged) 
{ 
    return jagged.SelectMany(inner => 
     inner.SelectMany(innerInner => innerInner)).ToArray(); 
} 

public static T[][][] FromFlatWithSizes<T>(this T[] flat, int[] sizes) 
{ 
    int inPtr = 0; 
    int sPtr = 0; 
    int topSize = sizes[sPtr++]; 
    T[][][] rtn = new T[topSize][][]; 
    for (int i = 0; i < topSize; i++) 
    { 
     int midSize = sizes[sPtr++]; 
     T[][] mid = new T[midSize][]; 
     rtn[i] = mid; 
     for (int j = 0; j < midSize; j++) 
     { 
      int botSize = sizes[sPtr++]; 
      T[] bot = new T[botSize]; 
      mid[j] = bot; 
      for (int k = 0; k < botSize; k++) 
      { 
       bot[k] = flat[inPtr++]; 
      } 
     } 
    } 
    return rtn; 
} 
2

我不這麼認爲羅裏。

如果它是一個Class [,,]多維數組,那麼你可能已經能夠做到這一點,但是每個數組可能具有不同的長度的事實將永遠是一個絆腳石。

假設你序列化爲Class [] +另一個類來給你原來的尺寸,你會是金色的。

5

這是你可以拼合到一維結構:

var jagged = new object[][][]; 
var flattened = jagged.SelectMany(inner => inner.SelectMany(innerInner => innerInner)).ToArray(); 

至於要回多維 - 這將完全取決於它是什麼你想達到/什麼數據代表

+1

我覺得'=> innerInner.SelectMany()'只需要'=> innerInner'。 – Rawling 2012-07-19 11:07:25

+0

完全正確 - 固定 – 2012-07-19 11:18:18

+0

+1對於「回頭」提及,以及它如何完全依賴。 – Dan 2013-06-14 19:11:30

相關問題