2013-03-05 69 views
-3

我正在試圖製作一個程序,讓用戶放置在城市中的一些城市和溫度。隨後,溫度清單將自行排列,以便能夠列出清單中最冷和最熱的城市。但問題是隻有溫度列表纔會被排序。這使得城市的溫度比以前有所不同。將兩個不同類型的列表鏈接在一起

那麼我可以把這兩個列表連接在一起,所以當第二個列表中的溫度發生變化時,原來獲得溫度的城市將發生變化?

我對編程很陌生。

謝謝。

+0

如果這聽起來邏輯通常孤單的方式來做到這一點..你應該嘗試張貼你已經嘗試過的東西 – Sayse 2013-03-05 12:01:57

+1

雖然我同意這不是一個寫得很好的問題(專業人士的描述因爲你已經有了一些具體的代碼,所以blem有點抽象和混亂),我不確定最近的選票是什麼......我在這裏看到的災難性更大。無論如何,要走的路可能是一個列表,其中的項目存儲城市名稱*和*溫度。 – 2013-03-05 12:03:12

+2

沒有足夠的人善於編程。如果你使用兩個名單,你會如何知道哪個城市與哪個城市相連?你需要一個對象來保存兩個值。或者爲你自己創建類,或者在這種情況下,可能'Tuple '就足夠了。現在你有一個'List ',你可以通過其中一個命令。 'list.OrderBy(x => x.Item1)'或'list.OrderBy(x => x.Item2)' – Corak 2013-03-05 12:10:38

回答

5

你可能希望把城市名稱和城市溫度在一起,就像

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的,所以你需要一些替代方案:

  • 如果你只需要一個排序順序,您可以實現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 
    
1

我建議你創建一個包含城市信息和例如相應的溫度

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)

我希望這有助於。 如果您還有其他問題,請隨時提問。

2

你需要有結構來保持城市和溫度在一起。

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); 
相關問題