2016-04-01 59 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] ='!'但抛出异常。 –