Как вернуть двумерный масив
#1
Отправлено 28 января 2008 - 09:00
В общем проблема в том что я не могу присвоить двумерный масив, который возвращается функ-ей.
ТОетсь - у меня есть функция которая после обработки возвращает двумерный масив.
НО когда я пытаюсь присвоить результат фун-ции масиву, то присваеивается только последняя строчка.
Делаю так : Mass = ReturnMass();, Может че не так делаю?
Пытался найти ответ у програмистов, но их ответ доказал лишь то что, С# и C#Script довольно разные языки.
#3
Отправлено 28 января 2008 - 10:25
Гляньте здесь
Спасибо помогло :)
Масив масивов - нормально работает.
НО все же задам вопросик для ощего развития...
Я пробовал работать с двумерными масивами С# - Arr[i,j] - в таком формате, и все бы ничего работало нормально, пока мне не пришлось вернуть его с помошью фунции, как я говорил возвращается только одна строка.
Можно ли это реализовать в манере двумерного масива?
#4
Отправлено 28 января 2008 - 10:36
Я пробовал работать с двумерными масивами С# - Arr[i,j] - в таком формате, и все бы ничего работало нормально...
А что значит нормально работало? Я так понимаю, что Вы его инициализировали как-то так:
//Jscript var arr = new Array(2,2) arr[0,0] = "0.0" arr[0,1] = "0.1" arr[1,0] = "1.0" arr[1,1] = "1.1"
Вы пробовали получать значения отдельных "ячеек"?
P.S. VBScript поддерживает двумерные массивы - это так, для справки, мало ли пригодится :)
#5
Отправлено 28 января 2008 - 10:50
Я пробовал работать с двумерными масивами С# - Arr[i,j] - в таком формате, и все бы ничего работало нормально...
А что значит нормально работало? Я так понимаю, что Вы его инициализировали как-то так://Jscript var arr = new Array(2,2) arr[0,0] = "0.0" arr[0,1] = "0.1" arr[1,0] = "1.0" arr[1,1] = "1.1"
нет не совсем так
//C#Script var arr = new Array(); arr[0,0] = "0.0"; arr[0,1] = "0.1"; arr[1,0] = "1.0"; arr[1,1] = "1.1";
Вы пробовали получать значения отдельных "ячеек"?
Пробовал, вытаскивал и Логом и дебагером и с помощью ShowMessage
Все елементы сохранялись и отображались нормально
#6
Отправлено 28 января 2008 - 10:58
Пробовал, вытаскивал и Логом и дебагером и с помощью ShowMessage
Все елементы сохранялись и отображались нормально
Хм, забавно, ибо я на выходе получаю одномерный массив (специально создал C#script проект и "прогнал" Ваш пример)...
#7
Отправлено 28 января 2008 - 15:27
Хм, забавно, ибо я на выходе получаю одномерный массив (специально создал C#script проект и "прогнал" Ваш пример)...
Да действительно, извените за сказаную глупость :)
Я просто сделал вывод в том же цыкле что и присваивание, выводил по строчно вот он у меня и работал :)))
Спасибо что раскрыли глаза, а то сделал детскую ошибку и решил что открыл Америку.
#8
Отправлено 31 января 2008 - 15:00
function GetDataFromExcel(Path, Sheet,ammonth) { var lDriver = DDT["ExcelDriver"](Path, Sheet); var arrExcelData = new Array(); var arrElement = new Array(); var count=0; while (!lDriver["EOF"]()) { for (var i=0;i<ammonth;i++) arrElement[i]=lDriver["Value"](i); arrExcelData[count]=arrElement; count++; lDriver["Next"](); } return arrExcelData; }
Эта ф-я считывает данные с екселя и возвращет двумерный масив - все бы не чего , вот только всем елементам конечного масива присваивается последнее значение масива arrElement.
Тоесть я считываю первую строку в масив arrElement, потом присваиваю его нулевуму елементу масива arrExcelData.
все нормально, но когда считываю и присваиваю вторую строку, то в масиве arrExcelData - присваивается новый елемент [1] а также меняется и [0] на последний, и тд
В итоге я получаю масив полностью одинаковых масивов - раных последней строки Екселя :(((
Никак не могу понять где сдесь ошибка?
Тоесть
#9
Отправлено 31 января 2008 - 15:16
arrExcelData[count]=arrElement;
написать
arrExcelData.push(arrElement);
и тогда переменная count не нужна
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#10
Отправлено 31 января 2008 - 15:22
а попробуйте вместо
arrExcelData[count]=arrElement;
написать
arrExcelData.push(arrElement);
и тогда переменная count не нужна
Ничего не изменилось :( все также меняются все Элементы)
#11
Отправлено 31 января 2008 - 16:22
//C#Script function GetDataFromExcel(Path, Sheet,ammonth) { var lDriver = DDT["ExcelDriver"](Path, Sheet); var arrExcelData = new Array(); var count=0; while (!lDriver["EOF"]()) { var arrElement = new Array(); for (var i=0;i<ammonth;i++) arrElement[i]=lDriver["Value"](i); arrExcelData[count]=arrElement; count++; lDriver["Next"](); } return arrExcelData; }
#12
Отправлено 01 февраля 2008 - 07:49
//C#Script function GetDataFromExcel(Path, Sheet,ammonth) { var lDriver = DDT["ExcelDriver"](Path, Sheet); var arrExcelData = new Array(); var count=0; while (!lDriver["EOF"]()) { var arrElement = new Array(); for (var i=0;i<ammonth;i++) arrElement[i]=lDriver["Value"](i); arrExcelData[count]=arrElement; count++; lDriver["Next"](); } return arrExcelData; }
Спасибо - работает!
Исходя из этого кода я предпологаю, что под каждый отдельно взятый масив выделяется память, точнее обьявляется первый елемент масива, по этому из и нужо обьявлять каждый раз для нового елемента :((
Поправте меня если я не прав.
#13
Отправлено 01 февраля 2008 - 08:02
Исходя из этого кода я предпологаю, что под каждый отдельно взятый масив выделяется память, точнее обьявляется первый елемент масива, по этому из и нужо обьявлять каждый раз для нового елемента :((
arrExcelData = {rrElement, rrElement, ...}
в Вашем случае rrElement - один объект, который Вы постоянно обновляли.
#14
Отправлено 01 февраля 2008 - 08:16
Исходя из этого кода я предпологаю, что под каждый отдельно взятый масив выделяется память, точнее обьявляется первый елемент масива, по этому из и нужо обьявлять каждый раз для нового елемента :((
arrExcelData = {rrElement, rrElement, ...}
в Вашем случае rrElement - один объект, который Вы постоянно обновляли.
1.Но ведь если я буду использовать как елемент не масив а обычную переменную в цыкле, то работать будет нормально
var arr = new Array();
var element;
for (var i=0;i<n;i++)
{
element++;
arr[i]=element;
}
Я ведь тоже в таком случае обновляю одну переменную, вот только в масие сохраняются данные и они будут у меня разные, А если елемент масив, то такое не катит :)
2. И еще один вопросик:
Нужно ли в С# Script для масивов использовать оператор delete?
Насколько я знаю в самом C# нужно а вот Jave - нет они сами удаляются :)
#15
Отправлено 01 февраля 2008 - 15:51
1.Но ведь если я буду использовать как елемент не масив а обычную переменную в цыкле, то работать будет нормально
Я ведь тоже в таком случае обновляю одну переменную, вот только в масие сохраняются данные и они будут у меня разные, А если елемент масив, то такое не катит :)
Массивы и переменные - это совсем разные вещи. В случае с массивом, Вы работаете не с объектом, а ссылкой на объект.
2. И еще один вопросик:
Нужно ли в С# Script для масивов использовать оператор delete?
Насколько я знаю в самом C# нужно а вот Jave - нет они сами удаляются :)
Вы делаете типичную ошибку, сопоставляя C#Script с C# и Java. C#Script образован от JScript, который ни к C#, ни к Java прямого отношения не имеет. В JScript объекты удалять нельзя, a оператор delete используется для удаления элементов массива (и не только).
#16
Отправлено 01 февраля 2008 - 16:13
Массивы и переменные - это совсем разные вещи. В случае с массивом, Вы работаете не с объектом, а ссылкой на объект.
Это я знаю :). Я это и имел введу в своем первом высказывании.
Вы делаете типичную ошибку, сопоставляя C#Script с C# и Java. C#Script образован от JScript, который ни к C#, ни к Java прямого отношения не имеет. В JScript объекты удалять нельзя, a оператор delete используется для удаления элементов массива (и не только).
А вот это уже интиресно:
Тоесть если я напишу:
delete arr;
то я удалю все его елементы, или нужно удалять по елементно?
#17
Отправлено 01 февраля 2008 - 16:37
А вот это уже интиресно:
Тоесть если я напишу:
delete arr;
то я удалю все его елементы, или нужно удалять по елементно?
Нужно удалять поэлементно:
delete(Array[index])
но ничего сложного в написании функции, которая будет полностью отчищать массив, нет.
#18
Отправлено 01 февраля 2008 - 17:52
Не парьтесь, просто пересоздайте его. Старый массив удалится автоматически сборщиком мусора. Если хотите явно вызвать сборщик, зовите функцию CollectGarbage().то я удалю все его елементы, или нужно удалять по елементно?
Дмитрий
#19
Отправлено 05 февраля 2008 - 09:08
Здравствуйте.
Не парьтесь, просто пересоздайте его. Старый массив удалится автоматически сборщиком мусора. Если хотите явно вызвать сборщик, зовите функцию CollectGarbage().то я удалю все его елементы, или нужно удалять по елементно?
Спасибо за информацию :) Теперь буду спокоен :)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных