3

I'm creating a class where I have come to the conclusion that the most efficient method to proceed is with an array variable that works as a matrix. I'm not sure how many columns or rows I will need so it can't have a specific length or size. 

Is there a way to declare a variable that works as a matrix? 

Example: Variable[Row Number, Column Number]

7

You can create a 2-dimensional list by using a List<List<Object>>. Entries should then be retrievable with a two bracket syntax, e.g.:

List<List<integer>> doubleList = new List<List<Integer>>();
for(integer i = 0; i < 3; ++i)
{
    doubleList[i] = new List<integer>();
    for(integer j = 0; j < 3; ++j)
    {
        doubleList[i].add(j);
    }
}
System.debug(doubleList[1][2]);

You can nest more than two lists if you need a 3D or 4D array, though per sfdcfox's answer there is a limit of 7 levels of nesting.

  • Perfect! This is exactly what I was looking for. Thank you very much. – Victor Echeverría Jul 11 '17 at 21:55
  • 1
    FYI, there is a limit of 7 levels of nesting... see this question for details. – sfdcfox Jul 12 '17 at 2:36
  • @sfdcfox Thanks, I suppose if you had a requirement for more than 7 levels you could use a Map<String, Object> where the map keys were n,m,z,... – IllusiveBrian Jul 12 '17 at 11:47
  • @IllusiveBrian It depends on the use case. By the time you get to the seventh level, you'll find that the code would be painful to even write, much less maintain. Two possible choices might be Map<CustomKey, Value>, where CustomKey is a class that implements hashCode/equals, or you might even do a Map<Object, Object>, where the value may be yet another Map<Object, Object>, as long as you need. The compiler limits you to seven levels, but using Object is a way to get further, it just requires more discipline. A simple string might work, too, but depends on the use case. – sfdcfox Jul 12 '17 at 12:45
  • @sfdcfox The code being painful to write is pretty much true whichever method you use. Also, I'm a bit surprised that getting around the limit using an Object doesn't throw a runtime error. – IllusiveBrian Jul 12 '17 at 12:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.