ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 13:30
Оценка:
Вот такая программа
using System;
using System.Collections;

class Class1
{
    static void Main(string[] args)
    {
        ArrayList al = new ArrayList();
        string[] tempArr = new string[3];
        tempArr[0] = "Первое значение";
        tempArr[1] = "Второе значение";
        tempArr[2] = "Третье значение";
        al.Add(tempArr);
        tempArr[0] = "Четвертое значение";
        tempArr[1] = "Пятое значение";
        tempArr[2] = "Шестое значение";
        al.Add(tempArr);
    }
}



на выходе получаем 2 эелемента в ArrayList:
Первый:
tempArr[0] = "Четвертое значение";
tempArr[1] = "Пятое значение";
tempArr[2] = "Шестое значение";
Второй.
tempArr[0] = "Четвертое значение";
tempArr[1] = "Пятое значение";
tempArr[2] = "Шестое значение";

ПОЧЕМУ так???
ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 13:41
Оценка:
Вполне разумно — Вы добавляете два элемента, каждый из которых, в свою очередь, является массивом. Что здесь непонятно?
--
VBSTREETS, Editor-in-Chief
http://blogs.gotdotnet.ru/personal/gaidar/


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 13:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вполне разумно — Вы добавляете два элемента, каждый из которых, в свою очередь, является массивом. Что здесь непонятно?


Да как-то непонял сначала почему добавляем разные массивы, а получаем одинаковые..
Уже все понял, теперь думаю как это по русски написать.
Re: ArrayList. Как туда добавить массив??
От: Daenur Россия  
Дата: 06.03.05 13:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот такая программа

А>
А>using System;
А>using System.Collections;

А>class Class1
А>{
А>    static void Main(string[] args)
А>    {
А>        ArrayList al = new ArrayList();
А>        string[] tempArr = new string[3];
А>        tempArr[0] = "Первое значение";
А>        tempArr[1] = "Второе значение";
А>        tempArr[2] = "Третье значение";
А>        al.Add(tempArr);
А>        tempArr[0] = "Четвертое значение";
А>        tempArr[1] = "Пятое значение";
А>        tempArr[2] = "Шестое значение";
А>        al.Add(tempArr);
А>    }
А>}



А>



А>на выходе получаем 2 эелемента в ArrayList:

А>Первый:
А> tempArr[0] = "Четвертое значение";
А> tempArr[1] = "Пятое значение";
А> tempArr[2] = "Шестое значение";
А>Второй.
А> tempArr[0] = "Четвертое значение";
А> tempArr[1] = "Пятое значение";
А> tempArr[2] = "Шестое значение";

А>ПОЧЕМУ так???


Млин! Читать книги надо!
Если я напишу так:

int i = 0;
i = 5;
MessageBox.Show(i.ToString());


Угадай, что выведется? 0 или 5? Конкретнее, почему 5, а не ноль?
А теперь подумай, почему у тебя так получается. (подсказка: у тебя та же фигня)
Еще раз, читай книги. Они — источник знаний! (с) Кто-то там...
(_2B || !_2B)
Re: ArrayList. Как туда добавить массив??
От: Twirl Швеция  
Дата: 06.03.05 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ПОЧЕМУ так???


Потому что Вы добавляете в ArrayList элемент типа array а не элементы массива. Для реализации необходимой Вам функциональности надо использовать ArrayList.AddRange()
ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 13:50
Оценка:
А, понял, что Вы хотите сделать . Для этого используйте простую функцию:
  public void AddArray2ArrayList(ArrayList ar, string[] str)
  {
   for(int i = 0; i < str.Length ; i++)
   {
    ar.Add(str[i]);
   }
  }

И перепишите код так:
   ArrayList ar = new ArrayList();
   string[] str = new string[3];
   str[0] = "Первый";
   str[1] = "Второй";
   str[2] = "Третий";
   AddArray2ArrayList(ar, str);
Дело в том, что, т.к. ArrayList принимает объект типа object, то ему совершенно все равно, что Вы передаете — любой объект становится элементом ArrayList.
--
VBSTREETS, Editor-in-Chief
http://blogs.gotdotnet.ru/personal/gaidar/


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: ArrayList. Как туда добавить массив??
От: Twirl Швеция  
Дата: 06.03.05 13:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А, понял, что Вы хотите сделать . Для этого используйте простую функцию:

А>
  public void AddArray2ArrayList(ArrayList ar, string[] str)
А>  {
А>   for(int i = 0; i < str.Length ; i++)
А>   {
А>    ar.Add(str[i]);
А>   }
А>  }


Простите но array реализовывает интерфэйс ICollection, зачем использовать самопальную функцию если есть ArrayList.AddRange(ICollection col)?
Re: ArrayList. Как туда добавить массив??
От: DMach Россия http://www.1Gb.ru
Дата: 06.03.05 14:25
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>ПОЧЕМУ так???


.AddRange(...); ?
... << RSDN@Home 1.1.4 beta 4 rev. 345>>
Re[2]: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 14:26
Оценка: :)
Здравствуйте, Twirl, Вы писали:

T>Здравствуйте, Аноним, Вы писали:


А>>ПОЧЕМУ так???


T>Потому что Вы добавляете в ArrayList элемент типа array а не элементы массива. Для реализации необходимой Вам функциональности надо использовать ArrayList.AddRange()


Нет проблема в том, что на выходе получаются 2 одинаковых массива. А не 2 разных как предполагалось...
Re[2]: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 14:29
Оценка:
Здравствуйте, Twirl, Вы писали:

T>Здравствуйте, Аноним, Вы писали:


А>>А, понял, что Вы хотите сделать . Для этого используйте простую функцию:

А>>
  public void AddArray2ArrayList(ArrayList ar, string[] str)
А>>  {
А>>   for(int i = 0; i < str.Length ; i++)
А>>   {
А>>    ar.Add(str[i]);
А>>   }
А>>  }


T>Простите но array реализовывает интерфэйс ICollection, зачем использовать самопальную функцию если есть ArrayList.AddRange(ICollection col)?


Мне нужно на выходе получить :
первый элемент:
tempArr[0] = "Первое значение";
tempArr[1] = "Второе значение";
tempArr[2] = "Третье значение";
Второй элемент:
tempArr[0] = "Четвертое значение";
tempArr[1] = "Пятое значение";
tempArr[2] = "Шестое значение";

Пока только какие-то корявые решения рождаются..
Re[3]: ArrayList. Как туда добавить массив??
От: Twirl Швеция  
Дата: 06.03.05 14:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Twirl, Вы писали:


T>>Здравствуйте, Аноним, Вы писали:


А>>>ПОЧЕМУ так???


T>>Потому что Вы добавляете в ArrayList элемент типа array а не элементы массива. Для реализации необходимой Вам функциональности надо использовать ArrayList.AddRange()


А>Нет проблема в том, что на выходе получаются 2 одинаковых массива. А не 2 разных как предполагалось...


String являеться reference типом. Поэтому чтобы создать два разных массива надо выделять 2й раз память.
Re[4]: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 14:35
Оценка:
T>String являеться reference типом. Поэтому чтобы создать два разных массива надо выделять 2й раз память.

Вот к чему я пришел в конечном итоге.

using System;
using System.Collections;

class Class1
{
static void Main(string[] args)
{
ArrayList al = new ArrayList();
string[] tempArr = new string[3];
string[] tempArr2 = new string[3];
tempArr[0] = "Первое значение";
tempArr[1] = "Второе значение";
tempArr[2] = "Третье значение";

al.Add(tempArr.Clone());
tempArr[0] = "Четвертое значение";
tempArr[1] = "Пятое значение";
tempArr[2] = "Шестое значение";

al.Add(tempArr.Clone());
}
}

Большое спасибо всем кто ответил.
Re: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 17:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот такая программа


Это ж просто.

using System;
using System.Collections;

class Class1
{
    static void Main(string[] args)
    {
        ArrayList al = new ArrayList();
        string[] tempArr = new string[3];
        tempArr[0] = "Первое значение";
        tempArr[1] = "Второе значение";
        tempArr[2] = "Третье значение";
        al.Add(tempArr);
        tempArr = new string[3];
        tempArr[0] = "Четвертое значение";
        tempArr[1] = "Пятое значение";
        tempArr[2] = "Шестое значение";
        al.Add(tempArr);
    }
}


И всё будет как надо.

А>ПОЧЕМУ так???


Потому что в твоём вариант у тебя в ArrayList al лежит два раза один и тот же массив.
Re[5]: ArrayList. Как туда добавить массив??
От: Аноним  
Дата: 06.03.05 17:23
Оценка:
Здравствуйте, Аноним, Вы писали:

T>>String являеться reference типом. Поэтому чтобы создать два разных массива надо выделять 2й раз память.


А>Вот к чему я пришел в конечном итоге. [...]


Грязный извращенец

http://www.rsdn.ru/Forum/Message.aspx?mid=1059177&amp;only=1
Автор:
Дата: 06.03.05
Re[3]: ArrayList. Как туда добавить массив??
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.03.05 20:13
Оценка: 2 (1) +1
Здравствуйте, <Аноним>, Вы писали:

А>Нет проблема в том, что на выходе получаются 2 одинаковых массива. А не 2 разных как предполагалось...


Я плякаль. Ты два раза заполнил один и тот же массив и удивляшся почему массива не два. Хочешь еще один такой же прикол?
int a = 1;
a = 2;
Console.WriteLine(a);

Этот код выведет 2, а не 1 и 2 как бы ты мог заподозрить.
Чтобы твой код выдавал два разных массива нужно явно создавать два разных массива:
ArrayList al = new ArrayList();
string[] tempArr = new string[3];
tempArr[0] = "Первое значение";
tempArr[1] = "Второе значение";
tempArr[2] = "Третье значение";
al.Add(tempArr);

tempArr = new string[3];
tempArr[0] = "Четвертое значение";
tempArr[1] = "Пятое значение";
tempArr[2] = "Шестое значение";
al.Add(tempArr);

Массив — это ссылчный тип. Его экземпляры не копируются при передаче в качестве параметров.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.