第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#字典一鍵很多值

C#字典一鍵很多值

慕村225694 2019-11-15 10:42:39
我想創(chuàng)建一個數(shù)據(jù)存儲以允許我存儲一些數(shù)據(jù)。第一個想法是創(chuàng)建一個字典,在該字典中您擁有一個帶有多個值的鍵,因此有點(diǎn)像一對多的關(guān)系。我認(rèn)為字典只有1個鍵值。我還能如何存儲此信息?
查看完整描述

3 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個贊

從.net3.5 +開始,Dictionary<IKey, List<IValue>>可以使用LookupLinq命名空間中的a 來代替使用a :


// lookup Order by payment status (1:m) 

// would need something like Dictionary<Boolean, IEnumerable<Order>> orderIdByIsPayed

ILookup<Boolean, Order> byPayment = orderList.ToLookup(o => o.IsPayed);

IEnumerable<Order> payedOrders = byPayment[false];

來自msdn:


查找類似于字典。區(qū)別在于字典將鍵映射到單個值,而查閱將鍵映射到值的集合。


您可以通過在實(shí)現(xiàn)IEnumerable的對象上調(diào)用ToLookup來創(chuàng)建Lookup的實(shí)例。


您可能還需要閱讀這個答案的相關(guān)問題。有關(guān)更多信息,請咨詢msdn。


完整示例:


using System;

using System.Collections.Generic;

using System.Linq;


namespace LinqLookupSpike

{

    class Program

    {

        static void Main(String[] args)

        {

            // init 

            var orderList = new List<Order>();

            orderList.Add(new Order(1, 1, 2010, true));//(orderId, customerId, year, isPayed)

            orderList.Add(new Order(2, 2, 2010, true));

            orderList.Add(new Order(3, 1, 2010, true));

            orderList.Add(new Order(4, 2, 2011, true));

            orderList.Add(new Order(5, 2, 2011, false));

            orderList.Add(new Order(6, 1, 2011, true));

            orderList.Add(new Order(7, 3, 2012, false));


            // lookup Order by its id (1:1, so usual dictionary is ok)

            Dictionary<Int32, Order> orders = orderList.ToDictionary(o => o.OrderId, o => o);


            // lookup Order by customer (1:n) 

            // would need something like Dictionary<Int32, IEnumerable<Order>> orderIdByCustomer

            ILookup<Int32, Order> byCustomerId = orderList.ToLookup(o => o.CustomerId);

            foreach (var customerOrders in byCustomerId)

            {

                Console.WriteLine("Customer {0} ordered:", customerOrders.Key);

                foreach (var order in customerOrders)

                {

                    Console.WriteLine("    Order {0} is payed: {1}", order.OrderId, order.IsPayed);

                }

            }


            // the same using old fashioned Dictionary

            Dictionary<Int32, List<Order>> orderIdByCustomer;

            orderIdByCustomer = byCustomerId.ToDictionary(g => g.Key, g => g.ToList());

            foreach (var customerOrders in orderIdByCustomer)

            {

                Console.WriteLine("Customer {0} ordered:", customerOrders.Key);

                foreach (var order in customerOrders.Value)

                {

                    Console.WriteLine("    Order {0} is payed: {1}", order.OrderId, order.IsPayed);

                }

            }


            // lookup Order by payment status (1:m) 

            // would need something like Dictionary<Boolean, IEnumerable<Order>> orderIdByIsPayed

            ILookup<Boolean, Order> byPayment = orderList.ToLookup(o => o.IsPayed);

            IEnumerable<Order> payedOrders = byPayment[false];

            foreach (var payedOrder in payedOrders)

            {

                Console.WriteLine("Order {0} from Customer {1} is not payed.", payedOrder.OrderId, payedOrder.CustomerId);

            }

        }


        class Order

        {

            // key properties

            public Int32 OrderId { get; private set; }

            public Int32 CustomerId { get; private set; }

            public Int32 Year { get; private set; }

            public Boolean IsPayed { get; private set; }


            // additional properties

            // private List<OrderItem> _items;


            public Order(Int32 orderId, Int32 customerId, Int32 year, Boolean isPayed)

            {

                OrderId = orderId;

                CustomerId = customerId;

                Year = year;

                IsPayed = isPayed;

            }

        }

    }

}

關(guān)于不變性的評論


默認(rèn)情況下,查找是不可變的,訪問internals將涉及反射。如果您需要可變性并且不想編寫自己的包裝器,則可以使用corefxlab中的(以前MultiValueDictionary稱為MultiDictionary)(以前不再更新其中的一部分)。Microsoft.Experimental.Collections


查看完整回答
反對 回復(fù) 2019-11-15
?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個贊

字典的值類型可以是List或包含多個對象的其他類。就像是


Dictionary<int, List<string>> 

用于由int鍵控并包含字符串列表的Dictionary。


選擇值類型的主要考慮因素是將使用Dictionary的目的,如果您必須對值進(jìn)行搜索或其他操作,那么也許考慮考慮使用一種可以幫助您完成所需工作的數(shù)據(jù)結(jié)構(gòu)- -像HashSet。


查看完整回答
反對 回復(fù) 2019-11-15
  • 3 回答
  • 0 關(guān)注
  • 1502 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號