2014-09-30 3 views
4

У меня есть несколько заданий в колледже, с которыми я столкнулся. На самом деле я просто смущен одной штукой относительно массива. Мне нужно объявить массив из трех столбцов, 5 строк. Первые два столбца являются целыми числами, а третий - буквенным. Поэтому я очень смущен объявлением типа данных, так как они разные. Это мой первый поворот с массивами, поэтому, пожалуйста, извините мое невежество. Вот как должен выглядеть мой массив.Объявление двумерного массива

Column 1 {0,300,350,400,450} 
Column 2 {299,349,399,449,500} 
Column 3 {F,D,C,B,A} 

(Это градация приложение)

я могу решить остальные проблемы сам, я просто запутался об этой части массива. Поэтому мой вопрос заключается в том, как объявить такой массив. Говорят, использовать двумерный массив, который меня только смущает, так как есть три столбца. Спасибо!

+0

Я думаю, что они говорят, что использовать 2-D * потому что * диапазон целое/число и буквы строки. Я предполагаю использовать 2D для диапазона и еще один массив строк для класса письма. Если оценка попадает в диапазон для «GradeRange (i)», то greade = 'Grades (i)'. Даже 2D является избыточным, поскольку high-end для i является нижним для i-1. [Массивы в Visual Basic] (http://msdn.microsoft.com/en-us/library/wak0wfyt.aspx) – Plutonix

+0

Это очень плохой выбор сценария для использования 2D-массива, но затем большинство сценариев, используемых для обучения использованию 2D-массивов. 2D-массивы имеют свое место, но их следует использовать только тогда, когда то, что вам действительно нужно, является матрицей, то есть где каждый элемент является равноправным. Во всяком случае, тот факт, что вы используете 2D-массив, совершенно не имеет отношения к вашему вопросу. Если вам нужно было объявить переменную, которая могла бы хранить значение «Integer» или «String», какой тип вы бы объявили? Это тип, который вы используете для своего массива. – jmcilhinney

+0

Благодарим вас за отзыв, вызывающий эту мысль. Хотя я не знаю ответа на ваш вопрос, у меня теперь есть что предложить. Еще раз спасибо! – JohnB

ответ

8

2-мерный массив является правильным. Первый индекс - столбец, второй - строка.

Dim strData(,) As String 'Use String variable type, even for the numbers 
Dim intRowCount As Integer = 5 
Dim intColumnCount As Integer = 3 
ReDim strData(intColumnCount - 1, intRowCount - 1) 'subtract 1 because array indices are 0-based. Column 0 = Range start, Column 1 = Range End, Column 2 = Grade 
'first row 
strData(0, 0) = "0" 'Range start 
strData(1, 0) = "299" 'Range end 
strData(2, 0) = "F" 'Grade 
'second row 
strData(0, 1) = "300" 
strData(1, 1) = "349" 
strData(2, 1) = "D" 
'third row 
strData(0, 2) = "350" 
strData(1, 2) = "399" 
strData(2, 2) = "C" 
'fourth row 
strData(0, 3) = "400" 
strData(1, 3) = "449" 
strData(2, 3) = "B" 
'fifth row 
strData(0, 4) = "450" 
strData(1, 4) = "500" 
strData(2, 4) = "A" 
'Add a row 
intRowCount = intRowCount + 1 
ReDim Preserve strData(intColumnCount - 1, intRowCount - 1) 
'sixth row 
strData(0, 5) = "501" 
strData(1, 5) = "600" 
strData(2, 5) = "A+" 

Обратите внимание, что Redim Preserve может изменить только последний индекс в массиве, поэтому мы храним в (column, row) порядке, а не более традиционного (row, column) порядка.

+0

Отличный пример того, как работать с двумерным массивом в VB. – dustinrwh

+0

Обычно я считаю первый индекс строкой и вторым индексом в качестве столбца. Кто-нибудь еще так думает? На самом деле неважно, что вы пишете и читаете данные, но если вы работаете с внешним кодом, мне просто интересно, если это так, как это делается. – dustinrwh

+1

Хороший вопрос! Обычно вы добавляете строки, а «Redim Preserve» работает только с последним индексом. Это означает, что последним индексом обычно является строка – SSS

2

Есть несколько способов приблизиться к этому. Один из них - объявить массив как тип объекта, и они присваивают целые числа или строки соответствующему элементу. Однако некоторые из них не считают это социально приемлемым, потому что это может привести к тому, что код трудно отлаживать.

Вы также можете использовать тип String для двухмерного массива и сохранить целые числа в строковых переменных. Это также обычно не выполняется из-за преобразования, необходимого для числовых сравнений и вычислений.

Другим подходом является использование структуры или класса, который содержит три значения, и создания массива этого.

Например,

Structure Item 
    Dim col1 as integer 
    Dim col2 as integer 
    Dim col3 as string 
    End Structure 

Dim itemList(20) as Item 

itemList(4).col1 = 23 
itemList(4).col2 = 45 
itemList(4).col3 = "somestring" 
+0

В реальном мире я бы рекомендовал использовать System.Data.DataTable – SSS

+0

Использование структур или классов - отличная идея. Это делает жизнь намного проще. – dustinrwh

Смежные вопросы