2016-04-01 99 views
1

我正在準備一個代碼,將一個字符串拆分爲字符數組,然後根據某種模式對每個數組進行洗牌。如何在C#中填充數組?

我已經使用一些代碼根據「密鑰大小」將數組拆分爲不同的char數組,並且它工作正常,除了最後一個可能缺少某些元素的數組。

如果最後一個數組比其他數組短,將引發異常,因爲在某個時候交換函數可能試圖將[0]與不存在的[x]交換。

那麼我怎樣才能把最後一個數組放到相同的大小呢?

這裏是我的分裂碼這是我在這裏的一個問題,在這裏我已經編輯使用焦炭而不是INT發現。

public static char[][] Split(char[] source, int keysize) 
    { 
     int fullArrayCount = source.Length/keysize; 
     int totalArrayCount = fullArrayCount; 
     int remainder = source.Length - (fullArrayCount * keysize); 
     if (remainder > 0) 
     { 
      totalArrayCount++; 
     } 
     char[][] output = new char[totalArrayCount][]; 
     for (int i = 0; i < fullArrayCount; i++) 
     { 
      output[i] = new char[keysize]; 
      Array.Copy(source, i * keysize, output[i], 0, keysize); // Array.Copy(Original Array,,Target array,"Where to start"0,Howmuch) 
     } 
     if (totalArrayCount != fullArrayCount) 
     { 

      output[fullArrayCount] = new char[remainder]; 
      // output[fullArrayCount] = new char[keysize]; 
      MessageBox.Show((keysize-remainder).ToString()); 
      Array.Copy(source, fullArrayCount * keysize,output[fullArrayCount], 0, remainder); 

     } 
     return output; 
    } 
+0

如果我正確理解了這個問題,你完全忽略了實際修改數組的部分;請包括您想要對'output'的元素進行的操作。 – Codor

+0

我不確定你需要什麼,但似乎你的問題是最後一個數組可能比其他數組短。爲什麼不讓其尺寸與其他尺寸相同 - 密鑰大小,像現在這樣做Array.Copy,並用一些默認值填充數組的其餘部分? –

+1

@NemanjaTodorovic:我認爲這就是問題所在...... OP不知道*怎麼做* – musefan

回答

0

拆分字符數組到指定長度的字符數組的集合,補齊管可以輕鬆替換/刪除/搜索的符號。 (它不喜歡空字符)

public static List<char[]> Split(char[] source, int keysize) 
{ 
    List<char[]> list = new List<char[]>(); 

    for (int i = 0; i < source.Length; i+= keysize) 
    { 
     List<char> c = source.Skip(i).Take(keysize).ToList(); 
     while (c.Count < keysize) 
     { 
      c.Add('|'); 
     } 
     list.Add(c.ToArray()); 
    } 
    return list; 
} 

static void Main(string[] args) 
{ 

    var x = Split("abcdefgh".ToCharArray(), 3); 

    Console.ReadLine(); 
} 
+0

謝謝男人:)它工作得很好。 –

1

你就不能代替:

output[fullArrayCount] = new char[remainder]; 

寫:

output[fullArrayCount] = new char[keysize]; 
+0

我以前試過這個,拋出一個異常是沒有足夠的元素。我嘗試了上面的相同代碼,創建了一個循環(密鑰大小 - 提醒)時間,其中a [i] ='!'但拋出異常。 –