簡體   English   中英

C# 中的多維關聯 Arrays

[英]Multidimensional Associative Arrays in C#

開始從 JS 和 PHP 進入 C#。 我已經習慣了對數據類型的嚴格使用,我正在努力弄清楚如何聲明不同數據類型的多維關聯數組。

例如在 PHP 中,可能會做這樣的事情

 $roomDiscount["apartment"][0]["minDaysOfStay"] = 10;
 $roomDiscount["apartment"][0]["discount"] = 0.3;

 $roomDiscount["apartment"][1]["minDaysOfStay"] = 15;
 $roomDiscount["apartment"][1]["discount"] = 0.35;

 $roomDiscount["apartment"][2]["minDaysOfStay"] = 16;
 $roomDiscount["apartment"][2]["discount"] = 0.5;

 $roomDiscount["presidential suite"][0]["minDaysOfStay"] = 10;
 $roomDiscount["presidential suite"][0]["discount"] = 0.1;

 $roomDiscount["presidential suite"][1]["minDaysOfStay"] = 15;
 $roomDiscount["presidential suite"][1]["discount"] = 0.15;

 $roomDiscount["presidential suite"][2]["minDaysOfStay"] = 16;
 $roomDiscount["presidential suite"][2]["discount"] = 0.2;

到目前為止,我一直在努力使用字典

private static void SkiTripWithDictionariesArrays()
        {
            int daysOfStay = int.Parse(Console.ReadLine());
            string typeOfAccomodation = Console.ReadLine().ToLower().Trim();
            string review = Console.ReadLine().ToLower().Trim();

            Dictionary<string, double> roomPrices = new Dictionary<string, double>();
            Dictionary<string, object> roomDiscounts = new Dictionary<string, object>(); // <---- thats the bugger
            Dictionary<string, double> reviewAdjustment = new Dictionary<string, double>();

           
            //populate room prices
            roomPrices.Add("room for one person", 18);
            roomPrices.Add("apartment", 25);
            roomPrices.Add("president apartment", 35);

        }

您當前的 PHP 代碼如下:

$roomDiscount["apartment"][0]["minDaysOfStay"] = 10;

在 C# 中與這種結構很接近:

Dictionary<string, List<Dictionary<string, double>>>

聲明這樣一個 object 可能不是一個好方法。 相反,您應該定義 class 對象。 我在下面給出的示例僅用於說明目的,不一定是最好的方法(這種情況有很多不同的方法):

public class RoomDiscount
{
    public int MinDaysOfStay {get;set;}
    public double Discount {get;set;}
}

public class RoomDiscounts
{
    public List<RoomDiscount> DiscountBands {get;set;}
}

用法:

Dictionary<string, RoomDiscounts> discountDetails = new Dictionary<string, RoomDiscounts>();
discountDetails["apartment"] = new RoomDiscounts {
    DiscountBands = new List<RoomDiscount> {
        new RoomDiscount {
            MinDaysOfStay = 10,
            Discount = 0.3
        },            
        new RoomDiscount {
            MinDaysOfStay = 15,
            Discount = 0.35
        },            
        new RoomDiscount {
            MinDaysOfStay = 16,
            Discount = 0.5
        }
    }
};

string room = "apartment";
int daysOfStay = 26;
double discount = discountDetails[room].DiscountBands.OrderByDescending(b => b.MinDaysOfStay).FirstOrDefault(b => daysOfStay >= b.MinDaysOfStay)?.Discount ?? 0;

同樣,這只是您可以以更強類型的方式組織數據的一種方式的示例。 請注意,如果未定義房間類型,這將引發異常,因此您可以使用TryGetValue從字典中檢索詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM