положить числа в массиве в ArrayList - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть числа, которые пользователь вводит в textBox3, и я преобразовал их в массивы nums. Теперь я хочу поместить половину из них в arraylist A и половину из них в arraylist B, как я могу это сделать? Спасибо

 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());
        }

Ответы [ 5 ]

5 голосов
/ 28 декабря 2010

Не рекомендуется использовать список массивов из-за проблем с боксом, поэтому используйте списки:

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

Редактировать: См. 101 пример linq для перехода к linq.

Редактировать: для отображения элементов в списке следует пройти список, list.ToString () возвращает тип списка. См. MSDN ToString , а не элементы, поэтому вы должны переопределить его и использовать свой конкретный список или сделать:

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

Или

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

Или

string strList = "";
lst1.ForEach(x => strList += x + " , ");
MessageBox.Show(strList);
1 голос
/ 28 декабря 2010

при условии, что длина массива четна

 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 голос
/ 28 декабря 2010
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 голос
/ 28 декабря 2010
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 голос
/ 28 декабря 2010
   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();
...