Нужна помощь с массивом в C # - PullRequest
0 голосов
/ 08 апреля 2011

Я только начинаю изучать c # и у меня проблемы с массивами. Массив, который я хочу, будет многомерным, но я не уверен в правильном способе его установки. Всего в этом массиве будет три измерения, и если он будет распечатан, он будет выглядеть примерно так:

1, 23, 6.4
1, 29, 1.0
1,  3, 8.68
1, 12, 0.001
1, -5, 0
2, 83, -5
2,  5, 14
2, 19, -12.5
2, 62, 8
2, 81, 1
3,  0, 1.4
3, 11, 1.7848
3, 55, 64.4
3, 82, 23
3,  6, 73.4

Измерение 1 будет иметь переменное количество наборов (будет извлечено из базы данных) Размер 2 всегда будет иметь 5 комплектов Размер 3 всегда будет иметь 1 комплект

Любая помощь будет оценена.

[UPDATE]

Я спешил, когда впервые опубликовал это, поэтому у меня не было времени полностью объяснить, для чего это будет использоваться. Вот дополнительная информация ...

Каждый день люди сортируют коробки с деталями и измеряют детали. Каждая коробка имеет 5 частей, которые необходимо измерить.

B1 -> P1: M, P2: M, P3: M, P4: M, P5: M
B2 -> P1: M, P2: M, P3: M, P4: M, P5: M
B3 -> P1: M, P2: M, P3: M, P4: M, P5: M
.
.
.
Bn -> P1: M, P2: M, P3: M, P4: M, P5: M

Где «B» - это информация о блоке (поле serial_no), «P» - информация о каждой детали (part_no), а «M» - измерение каждой детали. В коробке всегда будет 5 частей, и мы проведем только одно измерение для каждой части, но будет различное количество коробок.

До публикации я уже провел исследование массивов ([]), многомерных массивов ([,]), зубчатых массивов ([] []), списков и их комбинации. Я знаю, что с массивами вы должны указать размер каждого измерения, тогда как со списками вы можете добавить к ним больше.

Есть ли способ, которым я мог бы объединить 2D (который будет содержать информацию об измерении для каждой детали) и список (который будет содержать список блоков)?

Информация о ячейке будет int, информация о детали будет int, но измерение будет удвоено.

Ответы [ 5 ]

2 голосов
/ 08 апреля 2011

Это то, что вы ищете?

class Program
{
    public static void Main()
    {
        var hey = new int[][]
        {
            new int[]{11, 12, 13},
            new int[]{21, 22, 23},
            new int[]{31, 32, 33},
        };

        foreach (var row in hey)
        {
            foreach (int i in row)
            {
                Console.Write("{0} ", i);
            }

            Console.WriteLine();
        }

        Console.ReadLine();
    }
}

Идея состоит в том, что у вас есть массив массивов.var hey = new int [] [], означает, что вы создаете «массив массива» (int [] []).Если вы хотите получить доступ к одному из элементов, вы должны написать

var myElement = hey[x][y];

, где x - строка, а y - целое число в столбце y в этой строке.

Надеюсь, это поможет:)

Редактировать:

Теперь я вижу, что вам нужны многомерные массивы.Я пропустил это для начала.Вы уже опубликовали решение для этого, но чтобы завершить мой ответ, вы также можете создать экземпляры многомерных массивов, например, так (трехмерный целочисленный массив):

public static void Main()
{
    var hey = new string[,,] {
        {
            { "000", "001", "002" },
            { "010", "011", "012" },
            { "020", "021", "022" },
        },
        {
            { "100", "101", "102" },
            { "110", "111", "112" },
            { "120", "121", "122" },
        },
        {
            { "200", "201", "202" },
            { "210", "211", "212" },
            { "220", "221", "222" },
        },
    };

    for (int x = 0; x < 3; x++)
    {
        for (int y = 0; y < 3; y++)
        {
            for (int z = 0; z < 3; z++)
            {
                Console.WriteLine("{0}{1}{2} = {3}", x, y, z, hey[x, y, z]);
            }
            Console.WriteLine();
            Console.WriteLine();
        }

        Console.WriteLine();
    }

    Console.ReadLine();
}

Проблема с использованием многомерных массивов, нет понятия строк или столбцов в массиве (только в методе доступа).Таким образом, не существует встроенного способа получить только первую строку или значения в первом столбце и т. Д. ... Это затрудняет (если не делает невозможным) использование с Linq (что очень удобно, но чрезвычайно полезно).

1 голос
/ 08 апреля 2011

Взгляните на документы MSDN.Документация MSDN не всегда лучше для примеров, но это отличное место, чтобы начать узнавать, как реализовать что-то, когда вы впервые изучаете кодирование в .NET и что означают определенные свойства / методы / функциональные возможности. Документы многомерного массива MSDN

0 голосов
/ 08 апреля 2011

Вот что я в итоге сделал:

List<PartMeasurements> N = new List<PartMeasurements>();

N.Add(new PartMeasurements(24, new double[,] { {54, -0.146}, {9, 1.2}, {16, 0.097}, {15, 1}, {64, -0.9774} }));
N.Add(new PartMeasurements(4, new double[,] { {32, 0.76}, {45, 1.472}, {18, 0.005}, {52, 1.1}, {31, -0.1} }));
N.Add(new PartMeasurements(73, new double[,] { {81, 1.56}, {24, 1.34}, {9, 0.2}, {2, 0.6}, {55, -0.5} }));

public class PartMeasurements
{
    public int BoxSerial_No;
    public double[,] partNumber_and_Measurement = new double[5, 1];

    public Numbers(int BoxSerial_No, double[,] partNumber_and_Measurement)
    {
        this.BoxSerial_No = BoxSerial_No;
        this.partNumber_and_Measurement = partNumber_and_Measurement;
    }
}

Если я хочу увидеть, что находится в «N», я могу сделать это:

foreach(var x in N)
{
     Console.Write("{0}\t", x.BoxSerial_No);
     for (int y = 0; y < x.partNumber_and_Measurement.GetLength(0); y++)
     {
        Console.Write("{0} ", x.partNumber_and_Measurement[y, 0]);
        Console.Write("{0} ", x.partNumber_and_Measurement[y, 1]);
     }
 }
0 голосов
/ 08 апреля 2011

Поскольку то, что вы создаете, всегда имеет ширину 3, я видел в википедии C #, что int[,] может быть тем, что вы хотите, но я не знаю, как его настроить.

0 голосов
/ 08 апреля 2011
  var multiDimArray = new object[]
   {
      new int[] {0, 1, 2, 3},
      new string[] {"A", "B", "C", "D"},
      new double[] {23.45, 0d, 18.9},
      new int[] {23, 45, 67, 23, 3433, 5656, 1,}
   };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...