ユーザーがいくつかの都市とその都市の気温を入力できるプログラムを作成しようとしています。後で気温のリストが自動的にソートされるので、リスト内で最も寒い都市と最も暑い都市を取得できます。しかし問題は、温度のリストだけがソートされることです。これにより、都市は以前とは異なる温度になります。
2 つのリストをリンクして、2 番目のリストの気温が変化したときに、最初に気温を取得した都市の場所が変わるようにすることはできますか?
私はプログラミングが初めてです。
ありがとう。
ユーザーがいくつかの都市とその都市の気温を入力できるプログラムを作成しようとしています。後で気温のリストが自動的にソートされるので、リスト内で最も寒い都市と最も暑い都市を取得できます。しかし問題は、温度のリストだけがソートされることです。これにより、都市は以前とは異なる温度になります。
2 つのリストをリンクして、2 番目のリストの気温が変化したときに、最初に気温を取得した都市の場所が変わるようにすることはできますか?
私はプログラミングが初めてです。
ありがとう。
おそらく、都市名と都市温度を一緒にしたいと思うでしょう。
public class City
{
public string Name;
public double Temperature;
// etc.
}
次に、を作成List<City>
し、特定のフィールドに従ってそのリストを並べ替える必要があるときはいつでも、Linq(using System.Linq;
)を使用してリストを並べ替えることができます
List<City> sortedList = cityList.OrderBy(city => city.Temperature).ToList();
// or if you want the list sorted the other way around:
sortedList = cityList.OrderByDescending(city => city.Temperature).ToList();
編集:
3.5より前のバージョンの.NETを使用している場合、Linqは存在しないため、いくつかの代替手段が必要になります。
並べ替え順序が1つだけ必要な場合は、IComparable
インターフェースを実装できます
public class City : IComparable
{
public int CompareTo(object obj)
{
City other = obj as City;
if (other == null)
// obj was not a City, so this should throw an exception in my opinion
throw new ArgumentException;
return this.Temperature.CompareTo(other.Temperature);
}
}
次に、リストを次のように並べ替えることができますcityList.Sort()
または、リストを温度、名前で並べ替えることができるようにする場合は、代理人と協力する必要があります
cityList.Sort(delegate (City a, City b)
{
// -1 => a < b
// 0 => a == b
// 1 => a > b
return a.Name.CompareTo(b.Name);
});
// cityList is now sorted by name
cityList.Sort(delegate (City a, City b)
{
// -1 => a < b
// 0 => a == b
// 1 => a > b
return a.Temperature.CompareTo(b.Temperature);
});
// cityList is now sorted by temperature
都市と気温の両方を一緒に保持するための構造が必要です。例:
public class CityInfo
{
public string CityName {get; set;}
public float Temperature {get; set;}
}
次に、このクラスのリストを作成します。
List<CityInfo> citiInfos = new List<CityInfo>();
次に、ベースで並べ替えることができます。
都市名について:
var sortedByCity = citiInfos.OrderBy(cityInfo => cityInfo.CityName);
温度について:
var sortedByTemp = citiInfos.OrderBy(cityInfo => cityInfo.Temperature);
たとえば、都市情報と対応する気温を含むオブジェクトを作成することをお勧めします
class City
{
public string Name {get; private set;}
public int Inhabitants {get; private set;}
public float Temperature {get; private set;}
public City (string name, int inhabitants, float temp)
{
Name = name;
Inhabitants = inhabitants;
Temperature = temperature;
}
}
次に、を作成しList<City>
、都市を追加します
cityListName.Add(new City("CityName",9000,16.5));
...
List
次に、これを温度で並べ替えることができますcityListName.OrderBy((city)=>city.Temperature)
これがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。