C# 與vb.net 的Dictionary(字典)的鍵、值排序

      項目中可能須要用到Dictionary 排序,因而先作了一個小demo ,網上搜索真的沒有能知足我須要的,都是相似的,因而理解改造,一上午就在查找,實踐中過去了。如今把它實現了,把代碼貼出來,算是一個筆記吧。但願給須要的人也一個參考。html

1、C# 版本spa

代碼.net

 public void gettest()
        {
            Dictionary<string, string> dic1 = new Dictionary<string, string>();
            dic1.Add("2015-4-01", "2015-4-05");
            dic1.Add("2015-4-29", "2015-5-01");
            dic1.Add("2015-4-07a", "2015-4-10");
            dic1.Add("2015-4-07b", "2015-4-10");
            dic1.Add("2015-5-02", "2015-5-08");
            dic1.Add("2015-4-11", "2015-4-20");
            dic1.Add("2015-4-21", "2015-4-28");
            Dictionary<string, string> dic1Asc = dic1.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
            Dictionary<string, string> dic1desc = dic1.OrderByDescending(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
            Dictionary<string, string> dic1Asc1 = (from d in dic1 orderby d.Key ascending select d).ToDictionary(k => k.Key, v => v.Value);
            Dictionary<string, string> dic1desc2 = (from d in dic1 orderby d.Key descending  select d).ToDictionary(k => k.Key, v => v.Value);

            foreach (KeyValuePair<string, string> kvp in dic1Asc)
            {
               Response.Write(string.Format("開始日期 = {0}, 結束日期 = {1} <br/>", kvp.Key, kvp.Value));
            }

        }

        public void gettest2()
        {
            Dictionary<string, string> dic1 = new Dictionary<string, string>();
            dic1.Add("2015-4-01", "2015-4-05");
            dic1.Add("2015-4-29", "2015-5-01");
            dic1.Add("2015-4-07a", "2015-4-10");
            dic1.Add("2015-4-07b", "2015-4-10");
            dic1.Add("2015-5-02", "2015-5-08");
            dic1.Add("2015-4-11", "2015-4-20");
            dic1.Add("2015-4-21", "2015-4-28");

            Response.Write("<br />正序排序數據:<br />");
            foreach (KeyValuePair<string, string> item in dic1)
            {
                Response.Write("鍵名:" + item.Key + " 鍵值:" + item.Value + "<br />");
            }

            Dictionary<string, string> dc = new Dictionary<string, string>();

            foreach (KeyValuePair<string, string> kvp in dic1.Reverse())
            {
                dc.Add(kvp.Key, kvp.Value);
            }
            dic1 = null;
            //再看其輸出結果:
            Response.Write("<br />反序排序數據:<br />");
            foreach (KeyValuePair<string, string> item in dc)
            {
                Response.Write("鍵名:" + item.Key + " 鍵值:" + item.Value + "<br />");
            }
        }


        public void gettest3()
        {
            Dictionary<string, string> dic1 = new Dictionary<string, string>();
            dic1.Add("2015-4-01", "2015-4-05");
            dic1.Add("2015-4-29", "2015-5-01");
            dic1.Add("2015-4-07a", "2015-4-10");
            dic1.Add("2015-4-07b", "2015-4-10");
            dic1.Add("2015-5-02", "2015-5-08");
            dic1.Add("2015-4-11", "2015-4-20");
            dic1.Add("2015-4-21", "2015-4-28");
            List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(dic1);
            myList.Sort(delegate(KeyValuePair<string, string> s1, KeyValuePair<string, string> s2)
            {
                return s1.Value.CompareTo(s2.Value);
            });
            dic1.Clear();
            foreach (KeyValuePair<string, string> pair in myList)
            {
                dic1.Add(pair.Key, pair.Value);
            }
            foreach (string key in dic1.Keys)
            {
                Response.Write(string.Format("開始日期:{0}<br/>",dic1[key]));
            }

        }

效果圖:code

2、vb.net版本orm

代碼htm

 Public Sub gettest()
        Dim dic1 As Dictionary(Of String, String) = New Dictionary(Of String, String)
        dic1.Add("2015-4-01", "2015-4-05")
        dic1.Add("2015-4-29", "2015-5-01")
        dic1.Add("2015-4-07a", "2015-4-10")
        dic1.Add("2015-4-07b", "2015-4-10")
        dic1.Add("2015-5-02", "2015-5-08")
        dic1.Add("2015-4-11", "2015-4-20")
        dic1.Add("2015-4-21", "2015-4-28")
        Dim myList As List(Of KeyValuePair(Of String, String)) = sortByValue(dic1)
        For Each kvp As KeyValuePair(Of String, String) In myList
            'Console.WriteLine(kvp.Key & ":" & kvp.Value)
            Response.Write(String.Format("開始日期:{0}<br/>", kvp.Key))
        Next
        
    End Sub

    Public Sub gettest2()
        Dim dic1 As Dictionary(Of String, String) = New Dictionary(Of String, String)
        dic1.Add("2015-4-01", "2015-4-05")
        dic1.Add("2015-4-29", "2015-5-01")
        dic1.Add("2015-4-07a", "2015-4-10")
        dic1.Add("2015-4-07b", "2015-4-10")
        dic1.Add("2015-5-02", "2015-5-08")
        dic1.Add("2015-4-11", "2015-4-20")
        dic1.Add("2015-4-21", "2015-4-28")
        Dim myList As List(Of KeyValuePair(Of String, String)) = New List(Of KeyValuePair(Of String, String))(dic1)
        myList.Sort(Function(s1 As KeyValuePair(Of String, String), s2 As KeyValuePair(Of String, String))
                        Return s1.Value.CompareTo(s2.Value)
                    End Function)
        For Each kvp As KeyValuePair(Of String, String) In myList
            'Console.WriteLine(kvp.Key & ":" & kvp.Value)
            Response.Write(String.Format("開始日期:{0}<br/>2<br/>", kvp.Key))
        Next
    End Sub
    Shared Function hikaku(ByVal kvp1 As KeyValuePair(Of String, String), ByVal kvp2 As KeyValuePair(Of String, String)) As String
        Return kvp1.Value.CompareTo(kvp2.Value)
        ' Return kvp2.Value - kvp1.Value
    End Function
    Shared Function sortByValue(ByVal dict As Dictionary(Of String, String)) As List(Of KeyValuePair(Of String, String))
        Dim list As New List(Of KeyValuePair(Of String, String))(dict)
        list.Sort(AddressOf hikaku)
        Return list
    End Function

 效果圖:blog

C#的理解好一些,vb.net的有點難度,花了很多時間。排序

參考 :http://www.cnblogs.com/sekihin/archive/2008/08/27/1277605.htmlget

相關文章
相關標籤/搜索