C# Как заполнить 2D-массив массивом?
Я ищу умный способ заполнить 2D-массив массивом. 2D-массив представляет собой сетку со строками и ячейками. Входные данные (строка) для ячеек поступают из консоли.С readline(). Поэтому я разделил строку на массив строк и теперь хочу использовать этот массив строк для заполнения 2-го измерения массива данных.
string[,] data = new string[height, width]; //grid for (int i = 0; i < height; i++) { string[] line = Console.ReadLine().ToCharArray().Select(c => c.ToString()).ToArray(); data[i] = line; // <- compiler don't like this }
Пример:
входная строка - "abc".
линия выглядит так
строка[0] = = " a"
строка[1] = = " b"
строка[2] = = " c"
теперь я хочу иметь это
data[0][0] = = " a"
данные[0][1] = = " b"
данные[0][2] = = " c"
Что я уже пробовал:
Конечно, я мог бы использовать "для", но в этом случае важна каждая часть исполнения.
BillWoodruff
Если вы уточните свой вопрос, я отвечу кодом. Вот что нам нужно знать:
вы:
1. хотите сделать значение "ячейки" в 2d-массиве 2d-массивом
your2dary[0,0] возвращает массив ["a", " b"]
или...
2. вы хотите просто установить значение одной ячейки с помощью 2d-массива, где первое значение в 2d-массиве - это индекс строки, а второе-индекс столбца.
Это два разных сценария.
Можно создать класс, который позволит манипулировать массивом, как в scneario two, но я советую вам забыть об использовании сеттера, где вы заполняете 2d-массив, но используете только один индекс в сеттере: хотя это можно сделать, это умное программирование, которое действительно искажает способ использования массивов и, вероятно, вызовет у вас проблемы в будущем.
с наилучшими пожеланиями, бил/л
Garth J Lancaster
.. наверное, лучше, чем мой ответ на самом деле
Pierre Dole
То, что я ищу, - это результат:
data[0][0] == "a" data[0][1] == "b"
BillWoodruff
Наконец вы говорите нам, что вы действительно хотите сделать, но вы не обновили свой первоначальный пост. Поддержка здесь-это улица с двусторонним движением. Когда вы пересмотрите свой оригинальный пост, чтобы он был понятен всем, кто его читает, я отвечу рабочим кодом.
Pierre Dole
Я обновил сообщение. Извините, что я не все понимаю. Мой английский немного беден. Спасибо Вам за терпение.
BillWoodruff
Привет, Пьер, не волнуйся; здесь часто требуется несколько обменов мнениями, чтобы прояснить вопрос, и я, и другие люди здесь действительно хотим быть полезными :) Я опубликую пример пользовательского индексатора в ближайшие 12 часов или около того.
Теперь, когда вы пересмотрели вопрос, я думаю, что есть еще одна необходимая информация: строка [,] всегда будет иметь одни и те же размеры (если, конечно, вы не измените ее размер, что требует некоторых усилий в C#). Бывает ли так, что пользователь вашей программы должен ввести одинаковое количество значений для каждой "строки" вашего массива ? Если пользователь может ввести различное количество значений для каждой "строки", то вы, возможно, получите некоторую эффективность, используя зубчатый массив. И в одном из ваших комментариев здесь вы показываете неровный массив ... но в вашем пересмотренном посте вы не используете зубчатый массив.
Итак, мольбы проясняют это. твое здоровье, Билл
Pierre Dole
Это звучит очень любезно. Кажется, я нашел нужное место. :)
Не беспокойтесь о вводе. Ни один пользователь никогда этого не увидит. Я просто пытаюсь решить головоломку в браузерной игре кодирования. :) Игровой метод ввода и вывода осуществляется через консоль чтения и записи.
Массив, который я удалил, был всего лишь неудачной попыткой что-то описать. Что-то вроде шага между 2 шагами.