2010-12-28 6 views
0

私はユーザーがtextBox3に入力した数値を配列numに変換しましたが、arraylist Aの半分とarraylist Bの半分を入れたいのですがどうすればいいですか?おかげで、編集配列の番号をarraylistに入れます

string[] source = textBox3.Text.Split(','); 

int[] nums = new int[source.Length]; 

for (int i = 0; i < source.Length; i++) 
{ 
    nums[i] = Convert.ToInt32(source[i]); 
} 

    ArrayList A = new ArrayList(); 

    ArrayList B = new ArrayList(); 

:?

おかげで、私はあなたの答えをテストしたが、あなたのコードのすべての出力がsystem.collection.generic [可能System.Int32]は、いただきました!問題例えばおかげ

私はArsenMkrtが書いたことをこれをテストしました:

private void button1_Click(object sender, EventArgs e) 
    { 
     string[] source = textBox3.Text.Split(','); 
     int[] nums = new int[source.Length]; 

List<int> A = nums.Take(source.Length/2).ToList(); 

List<int> B = nums.Skip(source.Length/2).ToList(); 


      MessageBox.Show(B.ToString()); 
     } 
+0

である、または.ToArray()は配列を取得するために.ToList()を使用します –

答えて

5

を書くことができますので、ボクシングの問題のようにリストを使用します。

List<int> lst1 = new List<int>(); 
lst1.AddRange(nums.Skip(nums.Length/2)); 

List<int> lst2 = new List<int>(); 
lst2.AddRange(nums.Take(nums.Length/2)); 

最初のリストは長さ/ 2と長さを含み、2番目のリストは長さ/ 2の最初の項目を含む

編集: linqに交信する場合は101 linq sampleを参照してください。

foreach (var i in lsss) 
{ 
    MessageBox.Show(i.ToString()); 
} 

編集:あなたはそれをオーバーライドして、あなたの特定のリストを使用するか、または実行する必要がありますので、リストをトラバースする必要があり、リスト内の項目を示すためは、list.ToString()は、リストの種類がMSDN ToStringない商品を見る返します

それとも

lst1.ForEach(x=>MessageBox.Show(x.ToString())); 

それとも

string strList = ""; 
lst1.ForEach(x => strList += x + " , "); 
MessageBox.Show(strList); 
+0

私の質問を編集しました – Arash

+0

@arash、私は私の答えを更新しました。 –

1
string[] source = textBox3.Text.Split(','); 
    var nums = source.Select(s=>Convert.ToInt32(s)); 

    ArrayList A = new ArrayList(nums.Take(source.Length/2)); 

    ArrayList B = new ArrayList(nums.Skip(source.Length/2)); 

または値タイプのため、より高速である一般的なリストを持っている、あなたはそれが配列リストを使用してお勧めしません

List<int> A = nums.Take(source.Length/2).ToList(); 

    List<int> B = nums.Skip(source.Length/2)).ToList(); 
+0

私の質問 – Arash

+0

を編集しました。 – Arash

1
for (int i = 0; i < nums.Length; i++) 
{ 
if(i < nums.Length/2) A.Add(nums[i]); 
     else B.Add(nums[i]); 
} 

これはすべての.NETで動作します。一般的なList<int>の使用を検討してください、ボクシング/ボクシングを避け、可能な限りInvalidCastExceptionを避けてください。配列の長さを想定し

1
ArrayList A = new ArrayList(); 

ArrayList B = new ArrayList(); 

for (int i = 0; i < source.Length; i++) 
{ 
    if(i % 2 == 1) 
      A.Add(Convert.ToInt32(source[i])); 
    else 
      B.Add(Convert.ToInt32(source[i])); 
} 
1

たちは、一般的なリストを作成する原因には、ArrayListをしたい場合system.collection.generic [可能System.Int32]、答えの私の最初のバージョンを試してみてください、それがあるべきでも

ArrayList A = new ArrayList(); 
ArrayList B = new ArrayList();  
int backword = source.Length/2; 
int forward = 0; 
for (int i = 0; i < source.Length/2; i++) 
    { 

    A.Add(Convert.ToInt32(source[++forward])); 
    A.Add(Convert.ToInt32(source[++backword])); 


}  
+1

範囲外の例外が発生しませんか? – nan

+0

する必要があります:for(int i = 0; i

+0

オハイオ州、はい。私は非常に速く入力していましたが、コードを修正しました – TalentTuner

関連する問題