Re[4]: Об эффективности программ
От: GlebZ Россия  
Дата: 07.10.05 09:29
Оценка: -1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Кстати, вот еще пример. Из официального руководмтва Микрософт, между прочим


PD>Есть строка myString в формате CSV


PD>myDataSet.Tables["Table 1"].Rows.Add(myString.Split(char.Parse(",")));


PD>Берем строку, делаем из нее массив строк и по запихиваем этот массив в Rows. А нельзя ли без того, чтобы массив создавать ? В C++ я бы просто прошел по этой строке strtok и добавил строки — без всяких дополнительных массивов.

Павел. Ситуация со строками значительно интересней. Строка — это неvalue объект. И она не будет копироваться. Просто передается ссылка. А выделение маленького объекта в С# на порядок дешевле чем в С++. Поэтому это достаточно простой способ и эффективный.
Функции strtok нету(неприятная функция, я ее не люблю, в таких случаях работаю обычным поиском), точно также как нет split в С, но написать такую функцию легко. В принципе,
int i, l=0;
while ((i=myString.IndexOf(",", l))!=-1)
{
      rows.Add(myString.Substring(i, l-i);
      l=i;
}

Делает именно то, что заказывали. Без массива.
Сравните с тем-же самым в C++ только с strtok.

С уважением, Gleb.
ЗЫ. Интересно, если я напишу так
int l, i=0;
while ((i=myString.IndexOf(",", (l=i)))!=-1)
      rows.Add(myString.Substring(i, i-l);

Хоть не читабельно, но зато красиво
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.