2016-04-11 7 views
0

どのように配列をランダムに削除して追加しますか? たとえば、配列1011100101の長さが10であり、ユニットが6で4個の場合、長さ10の配列を3単位と7個のゼロで取得するにはどうすればよいですか? または、配列100100000の長さが10で2単位と8個のゼロを持つ場合、長さ10の配列を5単位と5つのゼロで取得する方法はありますか?それは1つのユニットだけ(ない2以上)を追加したり、一つのユニットを削除ランダムに削除するか、配列にユニットを追加する

int units = array.getUnits(); 
     if (units > P) 
     { 
      while (units != P) 
      { 
       int p = rnd.Next(units), pos = 0; 
       for (int i = 0; i < array.Length; i++) 
       { 
        if (array[i] == 1) 
         pos++; 
        if (pos == p) 
        { 
         array[p]=0; 
         break; 
        } 
       } 
       units--; 
      } 
     } 
     else if (units < P) 
     { 
      while (units != P) 
      { 
       int p = rnd.Next(array.Length-units), 
        pos = 0; 
       for (int i = 0; i < array.Length; i++) 
       { 
        if (array[i] == 0) 
         pos++; 
        if (pos == p) 
        { 
         array[p]=1; 
         break; 
        } 
       } 
       units++; 
      } 

     } 

:私はこのような何かを試してみました。

+3

使用一覧に戻って変換整数へ。途中で項目を挿入するのは、配列の方がはるかに難しいです。 – jdweng

答えて

0

コメントに記載されているJdwengに似ています。このようなもののリストを使う方が簡単です。配列に項目を自由に挿入することはできません。リストで、あなたはできます。

int[] source = {0, 1, 0, 1, 1}; 
    List<int> tempList = new List<int>(source); 
    int totalChanges = 20; 
    Random random = new Random(DateTime.Now.Millisecond); 
    for (int i = 0; i < totalChanges; i++) 
    { 
     int index = tempList.Count == 0 ? 0 : random.Next(0, tempList.Count); //return either 0 if empty or a random position 
     tempList.Insert(index, random.Next(0,1)); 
    } 
    int[] result = tempList.ToArray(); 

上記の例では、リストにソースint配列を変換し、それは、リスト内のランダムな位置で20の項目を追加し、バックアレイに結果を変換します。空の配列で始める場合は、インデックス0に1または0を挿入して開始します。

0

このバイナリ演算は現在実行中ですか?もしそうなら、

  • 変換は
  • は整数を使用して計算を行います
  • ので、あなたは、配列の途中に挿入できるバイナリ

String to binary in C#