Вот идея с использованием более объектно-ориентированного подхода.
Сначала вы создаете класс, который представляет каждую запись, например:
public class Surface
{
/// <summary>
/// Name of the surface e.g. RockA
/// </summary>
public string Name { get; set; }
/// <summary>
/// Moment magnitude Mw
/// </summary>
public double Moment { get; set; }
/// <summary>
/// Source to site distance from 0 to 20 km
/// </summary>
public int SourceToSite20 { get; set; }
/// <summary>
/// Source to site distance from 20 to 50 km
/// </summary>
public int SourceToSite50 { get; set; }
/// <summary>
/// Source to site distance from 50 to 100 km
/// </summary>
public int SourceToSite100 { get; set; }
}
Затем вы создаете их списокубедитесь, что имя поверхности одинаково для каждой группы, например, RockA:
List<Surface> surfaces = new List<Surface>();
surfaces.Add(new Surface
{
Name = "RockA",
Moment = 6.5,
SourceToSite20 = 18,
SourceToSite50 = 23,
SourceToSite100 = 30
});
surfaces.Add(new Surface
{
Name = "RockA",
Moment = 7.5,
SourceToSite20 = 43,
SourceToSite50 = 56,
SourceToSite100 = 68
});
surfaces.Add(new Surface
{
Name = "Stiff soil",
Moment = 6.5,
SourceToSite20 = 35,
SourceToSite50 = 41,
SourceToSite100 = 48
});
[...]
Теперь вы можете получить более легкий доступ к данным, например, используя запросы Linq:
Чтобы получить все записи с поверхностью "RockA":
List<Surface> rocks = surfaces.Where(x => x.Name == "RockA").ToList();
Поверхности с моментом = 6,5:
List<Surface> magintude65 = surfaces.Where(x => x.Moment == 6.5).ToList();
Источник на расстояние между 25 и 55
List<Surface> result = surfaces.Where(x => x.SourceToSite50 >= 25 && x.SourceToSite100 <= 55).ToList();
Если вы не хотите создавать класс, вы также можете использовать список кортежей:
var surfaces = new List<Tuple<string, double, int, int, int>>();
surfaces.Add(new Tuple<string, double, int, int, int>("RockA", 6.5, 18, 23, 30));
[...]
Тогда вы можете делать такие же запросы, но я рекомендую использовать класс, этодля чего они все равно.