using System;
using System.Collections.Generic;
using System.Linq;
namespace Recetas.Ch01
{
public class ReporteTiempo
{
public int DiaSemana
{
get;
set;
}
public int TemperaturaDiaria
{
get;
set;
}
public int TemperaturaPromedio
{
get;
set;
}
}
public class PronosticoTiempo
{
private int[] temperaturas = { 13, 19, 23, 7, 23, 17, 7 };
IList<string> diasSemana = new List<string>() {"Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
public ReporteTiempo this[string dia]
{
get
{
// Índice del día de la semana
int indiceDia = diasSemana.IndexOf(dia);
return new ReporteTiempo() { DiaSemana = indiceDia, TemperaturaDiaria = temperaturas[indiceDia], TemperaturaPromedio = CalcularTemperatura(indiceDia) };
}
set
{
temperaturas[diasSemana.IndexOf(dia)] = value.TemperaturaDiaria;
}
}
private int CalcularTemperatura(int diaSemana)
{
int[] tmp = new int[diaSemana + 1];
Array.Copy( temperaturas, 0, tmp, 0, diaSemana + 1);
return (int) tmp.Average();
}
}
public class Prueba
{
public static void Main()
{
// Creación pronóstico tiempo
PronosticoTiempo pronostico = new PronosticoTiempo();
// Uso del indixer para el pronóstico
string[] dias = {"Lunes", "Martes", "Jueves", "Sábado"};
foreach (string dia in dias)
{
ReporteTiempo reporte = pronostico[dia];
Console.WriteLine ("Día: {0}, Índice día: {1}, Temperatura: {2}, Promedio: {3}", dia, reporte.DiaSemana, reporte.TemperaturaDiaria, reporte.TemperaturaPromedio);
}
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgUmVjZXRhcy5DaDAxCnsKCXB1YmxpYyBjbGFzcyBSZXBvcnRlVGllbXBvCgl7CgkJcHVibGljIGludCBEaWFTZW1hbmEKCQl7CgkJCWdldDsKCQkJc2V0OwoJCX0KCQkKCQlwdWJsaWMgaW50IFRlbXBlcmF0dXJhRGlhcmlhCgkJewoJCQlnZXQ7CgkJCXNldDsKCQl9CgkJCgkJcHVibGljIGludCBUZW1wZXJhdHVyYVByb21lZGlvCgkJewoJCQlnZXQ7CgkJCXNldDsKCQl9Cgl9CgkKCXB1YmxpYyBjbGFzcyBQcm9ub3N0aWNvVGllbXBvCgl7CgkJcHJpdmF0ZSBpbnRbXSB0ZW1wZXJhdHVyYXMgPSB7IDEzLCAxOSwgMjMsIDcsIDIzLCAxNywgNyB9OwoJCUlMaXN0PHN0cmluZz4gZGlhc1NlbWFuYSA9IG5ldyBMaXN0PHN0cmluZz4oKSB7Ikx1bmVzIiwgIk1hcnRlcyIsICJNacOpcmNvbGVzIiwgIkp1ZXZlcyIsICJWaWVybmVzIiwgIlPDoWJhZG8iLCAiRG9taW5nbyIgfTsKCQkKCQlwdWJsaWMgUmVwb3J0ZVRpZW1wbyB0aGlzW3N0cmluZyBkaWFdCgkJewoJCQlnZXQKCQkJewoJCQkJLy8gw41uZGljZSBkZWwgZMOtYSBkZSBsYSBzZW1hbmEKCQkJCWludCBpbmRpY2VEaWEgPSBkaWFzU2VtYW5hLkluZGV4T2YoZGlhKTsKCQkJCQoJCQkJcmV0dXJuIG5ldyBSZXBvcnRlVGllbXBvKCkgeyBEaWFTZW1hbmEgPSBpbmRpY2VEaWEsIFRlbXBlcmF0dXJhRGlhcmlhID0gdGVtcGVyYXR1cmFzW2luZGljZURpYV0sIFRlbXBlcmF0dXJhUHJvbWVkaW8gPSBDYWxjdWxhclRlbXBlcmF0dXJhKGluZGljZURpYSkgfTsKCQkJfQoJCQlzZXQKCQkJewoJCQkJdGVtcGVyYXR1cmFzW2RpYXNTZW1hbmEuSW5kZXhPZihkaWEpXSA9IHZhbHVlLlRlbXBlcmF0dXJhRGlhcmlhOwoJCQl9CgkJfQoJCQoJCXByaXZhdGUgaW50IENhbGN1bGFyVGVtcGVyYXR1cmEoaW50IGRpYVNlbWFuYSkKCQl7CgkJCWludFtdIHRtcCA9IG5ldyBpbnRbZGlhU2VtYW5hICsgMV07CgkJCUFycmF5LkNvcHkoIHRlbXBlcmF0dXJhcywgMCwgdG1wLCAwLCBkaWFTZW1hbmEgKyAxKTsKCQkJCgkJCXJldHVybiAoaW50KSB0bXAuQXZlcmFnZSgpOwoJCX0KCX0KCQoJcHVibGljIGNsYXNzIFBydWViYQoJewoJCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCQl7CgkJCS8vIENyZWFjacOzbiBwcm9uw7NzdGljbyB0aWVtcG8KCQkJUHJvbm9zdGljb1RpZW1wbyBwcm9ub3N0aWNvID0gbmV3IFByb25vc3RpY29UaWVtcG8oKTsKCQkJCgkJCS8vIFVzbyBkZWwgaW5kaXhlciBwYXJhIGVsIHByb27Ds3N0aWNvCgkJCXN0cmluZ1tdIGRpYXMgPSB7Ikx1bmVzIiwgIk1hcnRlcyIsICJKdWV2ZXMiLCAiU8OhYmFkbyJ9OwoJCQkKCQkJZm9yZWFjaCAoc3RyaW5nIGRpYSBpbiBkaWFzKQoJCQl7CgkJCQlSZXBvcnRlVGllbXBvIHJlcG9ydGUgPSBwcm9ub3N0aWNvW2RpYV07CgkJCQkKCQkJCUNvbnNvbGUuV3JpdGVMaW5lICgiRMOtYTogezB9LCDDjW5kaWNlIGTDrWE6IHsxfSwgVGVtcGVyYXR1cmE6IHsyfSwgUHJvbWVkaW86IHszfSIsIGRpYSwgcmVwb3J0ZS5EaWFTZW1hbmEsIHJlcG9ydGUuVGVtcGVyYXR1cmFEaWFyaWEsIHJlcG9ydGUuVGVtcGVyYXR1cmFQcm9tZWRpbyk7CgkJCX0KCQl9Cgl9Cn0=
Día: Lunes, Índice día: 0, Temperatura: 13, Promedio: 13
Día: Martes, Índice día: 1, Temperatura: 19, Promedio: 16
Día: Jueves, Índice día: 3, Temperatura: 7, Promedio: 15
Día: Sábado, Índice día: 5, Temperatura: 17, Promedio: 17