2016-12-08 3 views
0

У меня есть проблема извлечения длины столбцов в рваной массиве, как это:Получить длину столбцов в Jagged массиве

jagged array

Как я могу получить длину 2-й (с индексом 1 и длиной 8) или, например, пятый (индекс 4 и длина 4)? То же самое со строками. Мне нужна длина указанной строки.

+2

показывает нам некоторый пример кода, который мы можем помочь вам –

+0

@Quantic он сказал, что длина колонны, так что я думаю, что он хочет, чтобы перебирать массив и посчитайте, если строка содержит что-нибудь для нужного столбца –

+0

@BlakeThingstad Oh Я вижу, да, «длина» определенного столбца (на его картинке) не может быть вычислена из встроенного вызова метода, вам нужно будет итерации каждого подматрица, чтобы увидеть, содержит ли он этот индекс, и номер из тех, которые делают это «длина» столбца. На самом деле нужно увидеть какой-то код, поэтому мы не смешиваем, какой индекс означает «строка», а это означает «столбец» для изображения OP. Мой исходный комментарий неверен, поэтому я удалил его. – Quantic

ответ

2

Метод getColumnLength проходит через каждую строку и проверяет, достаточно ли строки, чтобы столбец находился в ней. Если он затем добавляет его к счету строк, которые имеют этот столбец.

public class Program { 
    public static void Main(string[] args) { 
     int[][] jaggedArray = { 
      new int[] {1,3,5,7,9}, 
      new int[] {0,2,4,6}, 
      new int[] {11,22} 
     }; 

     Console.WriteLine(getColumnLength(jaggedArray, 4)); 

     Console.WriteLine("Press any key to continue. . ."); 
     Console.ReadKey(); 
    } 

    private static int getColumnLength(int[][] jaggedArray, int columnIndex) { 
     int count = 0; 
     foreach (int[] row in jaggedArray) { 
      if (columnIndex < row.Length) count++; 
     } 
     return count; 
    } 
} 
+0

Спасибо @Blake Thingstad! Этот метод работал отлично! –

+0

Я хочу отметить, что это больше [обычный] (http://stackoverflow.com/questions/300522/count-vs-length-vs-size-in-a-collection), чтобы называть это графом вместо длины потому что элементы столбца не обязательно смежны. OP имеет непрерывные элементы в направлении столбца, но количество элементов одинаково, независимо от того, смешана ли каждая строка. Это довольно незначительно, но изображение OP делает его похожим на то, что направление столбца связано каким-то образом (потому что каждый элемент смежный), но это случайное состояние для Jagged Array. Глядя снова Емкость может быть лучшим подгоняемым именем. – Quantic

+0

@Quantic Я не думал об этом на самом деле, так как я никогда не работал с зубчатым массивом, надеюсь, массив OP смежный, в противном случае я задаюсь вопросом, могут ли быть некоторые ошибки с этим. –

-1

Моей задачей является переполнение столбца, например, если я нахожусь в положении [2] [2] (номер 9), и когда пользователь вводит «идти вверх с 4 шагами», мне нужно ввести с другой стороны столбца и перейдите к элементу [4] [2] (номер 15) на изображении. У меня есть следующий метод перетекания:

static int index(int i, int n) 
{ 
    return i % n < 0 ? n + (i % n) : i % n; 
} 

где я это текущее положение и п длина столбца/строки

+2

Рассмотрите возможность чтения кода, а не суперкомпактного. Используя правильные имена переменных и структуру, ваш код намного легче понять. Например, имя функции «index» не говорит мне ничего об этой функции, а параметры «i» и «n» не имеют значения. –

+0

Индекс метода возвращает новый индекс, когда мой текущий индекс вышел за пределы массива. Переменная «i» - это my currentIndex, а переменные «n» - это длина массива. –

+0

Я не просил объяснений, просто предлагая совет: –

2

Вы должны быть в состоянии получить длину строки довольно легко, как это просто будет длиной отдельного массива в вашем массиве массивов. Например: arrays[3].length будет 8.

Столбцы разные, потому что нам нужна информация о каждом массиве. Мы можем выполнить итерацию, подсчитывая количество массивов, длина которых больше номера столбца, который вы ищете.

public static int getColumnLength(int[][] arrays, int columnNumber) { 
    int count = 0; 
    for(int i = 0; i < arrays.length; i++) { 
    if (arrays[1].length > columnNumber) { 
     count++; 
    } 
    } 
} 
1

Используйте LINQ!

public static int GetColumnSize<T>(this T[][] array, int columnNumber) => 
    array 
    .Where(subArray => subArray.Length > columnNumber) 
    .Count(); 

public static int GetRowSize<T>(this T[][] array, int rowNumber) => 
    (array.Length <= rowNumber) 
     ? array[rowNumber].Length 
     : 0; 
+0

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

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