List<List<List<PopulationData>>> populations = new List<List<List<PopulationData>>>();
List<List<PopulationData>> routes = new List<List<PopulationData>>();
List<List<PopulationData>> blockCommunity;
List<PopulationData> persons;
for (int i = 0; i < x; i++)
{
blockCommunity = new List<List<PopulationData>>();
if (i == 1)
{
z = a;
}
else
{
z = 4;
}
Console.WriteLine("Rute ke- {0}", i + 1);
for (int j = 0; j < y; j++)
{
persons = new List<PopulationData>();
Console.Write("Populasi ke {0} = ", j + 1);
string input = Console.ReadLine();
string[] listPerson = input.Split(' ');
for (int k = 0; k < z; k++)
{
persons.Add(new PopulationData(listPerson[k]));
}
blockCommunity.Add(persons);
}
populations.Add(blockCommunity);
Console.WriteLine("");
}
foreach (var iteratePopulation in populations)
{
persons = new List<PopulationData>();
foreach(var iterateBlock in iteratePopulation)
{
foreach(var personal in iterateBlock)
{
persons.Add(personal);
}
}
routes.Add(persons);
}
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
a = 0;
foreach (var iterateRoute in routes)
{
Console.Write("Populasi ke {0} = ",a+1);
foreach(var iteratePerson in iterateRoute)
{
Console.Write(iteratePerson.dataValue+" ");
}
Console.WriteLine("");
a++;
}
Console.ReadKey();
}
}
class PopulationData
{
public string dataValue { get; set; }
public PopulationData(string value)
{
dataValue = value;
}
}
}
Penjelasan
Program ini digunakan untuk menyelesaikan array multidimensi dari array dimensi 3 menjadi dimensi 2. Pertama-tama inisialisasi variable list yang menyimpan list yang menyimpan list dari object yang bernama PopulationData untuk menyatakan 3 dimensi. List terluar untuk daftar rute yang tersedia, pada contoh kasus ada 3 rute. List berikutnya untuk daftar populasi setiap rute. Terakhir list terdalam untuk daftar setiap orang di tiap kelompok populasinya.
Kemudian kita masukkan populasi tiap rutenya dengan input user. Dikarenakan kita menggunakan string maka kita harus memisahkan dari string "A 6 10 A" menjadi "A","6","10", "A" dengan method yang dinamakan Split. Lalu kita push ke dalam tiap populasinya dan kumpulan populasi dipush ke rute dan kumpulan rute dijadikan list.
Terakhir kita harus menghilangkan rute dan menggabungkan populasi ke n dari rute awal sampai rute akhir. Kita tetap menggunakan 3 nested foreach loop karena kumpulan rute adalah variable 3 dimensi dan kita cukup membuat list person pada nested ke 2 karena rute sudah dihilangkan sehingga populasi 1 pada rute 1 bergabung dengan populasi 1 pada rute 2 hingga akhir. Setelah itu kita output hal tersebut dalam 2 foreach karena data berubah menjadi 2 dimensi.
1 votes Thanks 1
Pyrozen
variable x untuk menentukan jumlah rute, pada kasus diatas ada 3 rute, lalu variable y untuk menentukan jumlah populasi tiap rute yaitu 3 dan variable z untuk jumlah orang tiap populasinya. Khusus variable a digunakan untuk mengganti jumlah orang tiap populasi menjadi 3 pada saat di rute ke 2
Berikut jawabannya dalam bahasa C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Simple_CSharp_Program
{
class RouteData
{
static void Main()
{
int x, y, z, a;
x = 3;
y = 3;
z = 4;
a = 3;
List<List<List<PopulationData>>> populations = new List<List<List<PopulationData>>>();
List<List<PopulationData>> routes = new List<List<PopulationData>>();
List<List<PopulationData>> blockCommunity;
List<PopulationData> persons;
for (int i = 0; i < x; i++)
{
blockCommunity = new List<List<PopulationData>>();
if (i == 1)
{
z = a;
}
else
{
z = 4;
}
Console.WriteLine("Rute ke- {0}", i + 1);
for (int j = 0; j < y; j++)
{
persons = new List<PopulationData>();
Console.Write("Populasi ke {0} = ", j + 1);
string input = Console.ReadLine();
string[] listPerson = input.Split(' ');
for (int k = 0; k < z; k++)
{
persons.Add(new PopulationData(listPerson[k]));
}
blockCommunity.Add(persons);
}
populations.Add(blockCommunity);
Console.WriteLine("");
}
foreach (var iteratePopulation in populations)
{
persons = new List<PopulationData>();
foreach(var iterateBlock in iteratePopulation)
{
foreach(var personal in iterateBlock)
{
persons.Add(personal);
}
}
routes.Add(persons);
}
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
a = 0;
foreach (var iterateRoute in routes)
{
Console.Write("Populasi ke {0} = ",a+1);
foreach(var iteratePerson in iterateRoute)
{
Console.Write(iteratePerson.dataValue+" ");
}
Console.WriteLine("");
a++;
}
Console.ReadKey();
}
}
class PopulationData
{
public string dataValue { get; set; }
public PopulationData(string value)
{
dataValue = value;
}
}
}
Penjelasan
Program ini digunakan untuk menyelesaikan array multidimensi dari array dimensi 3 menjadi dimensi 2. Pertama-tama inisialisasi variable list yang menyimpan list yang menyimpan list dari object yang bernama PopulationData untuk menyatakan 3 dimensi. List terluar untuk daftar rute yang tersedia, pada contoh kasus ada 3 rute. List berikutnya untuk daftar populasi setiap rute. Terakhir list terdalam untuk daftar setiap orang di tiap kelompok populasinya.
Kemudian kita masukkan populasi tiap rutenya dengan input user. Dikarenakan kita menggunakan string maka kita harus memisahkan dari string "A 6 10 A" menjadi "A","6","10", "A" dengan method yang dinamakan Split. Lalu kita push ke dalam tiap populasinya dan kumpulan populasi dipush ke rute dan kumpulan rute dijadikan list.
Terakhir kita harus menghilangkan rute dan menggabungkan populasi ke n dari rute awal sampai rute akhir. Kita tetap menggunakan 3 nested foreach loop karena kumpulan rute adalah variable 3 dimensi dan kita cukup membuat list person pada nested ke 2 karena rute sudah dihilangkan sehingga populasi 1 pada rute 1 bergabung dengan populasi 1 pada rute 2 hingga akhir. Setelah itu kita output hal tersebut dalam 2 foreach karena data berubah menjadi 2 dimensi.