質問

私のキーと値のペアというとやりがいを感じていました用SortedListの代わりにハッシュテーブル.

私は追加のデータの順に下がっSortedListを注いで

     Key          | Value
     --------------------------------
 1   "700-800"    | List(Of Object)
 2   "900-1000"   | List(Of Object)
 3   "1100-1200"  | List(Of Object)
 4   "1700-1800"  | List(Of Object)
 5   "1900-2000"  | List(Of Object)

Keyは文字列の値のリストオブジェクト。のキーを表す時にスロットが連結されかの整数値で区切ら"-"ではじまる。"700"文字列とした0700当初は整数とします。

例えば

Dim key As String = slotTimeStart.ToString() & "-" & slotTimeEnd.ToString()

がこれらのキーと値のペアが追加されSortedList表示される順序

 3   "1100-1200"  | List(Of Object)
 4   "1700-1800"  | List(Of Object)
 5   "1900-2000"  | List(Of Object)
 1   "700-800"    | List(Of Object)
 2   "900-1000"   | List(Of Object)

残念ながら私を受け、時代のスロットとしての整数値を変更することはできません。

必要があります。力のようにSortedList?※この記事のオリジナルはこの問題のための私に格納my ーション-キーとは何ですか。があります。

役に立ちましたか?

解決

の作成 SortedList(Of String, List(Of Object)) がパスに IComparer(Of String)コンストラクタ, の実施を比較し、キーの順序に従っています。

だそれを実現する自分がいなくなどの文字列'-'を解析し両面 Int32.Parse と反応します。そしてないものの後に'-'る場合、キー範囲は重なる.

編集:ました。でプリントアウトしたりすることが鍵になるのである彼らはソートされています。

using System;
using System.Collections.Generic;

public class Test
{
    static void Main(string[] args)
    {
        var list = new SortedList<string, int>(new RangeComparer());
        list.Add("900-1000", 10);
        list.Add("1100-1200", 20);
        list.Add("700-800", 30);
        list.Add("1700-18000", 40);
        list.Add("1900-2000", 50);

        foreach (var entry in list)
        {
            Console.WriteLine(entry.Key);
        }
    }
}

public class RangeComparer : IComparer<string>
{
    private static int ParseStartOfRange(string range)
    {
        int hyphenIndex = range.IndexOf('-');
        // Normally do some error checking in case hyphenIndex==-1
        string firstPart = range.Substring(0, hyphenIndex);
        return int.Parse(firstPart);
    }

    public int Compare(string first, string second)
    {
        // In real code you would probably add nullity checks
        int firstStart = ParseStartOfRange(first);
        int secondStart = ParseStartOfRange(second);
        return firstStart.CompareTo(secondStart);
    }
}

他のヒント

あなたはアルファベット順の代わりに、数値的にそれを並べ替えているように、

に見えます。あなたが探しているソート順を得るためにあなたのキー数値を作成する必要があります。

タイムズそれら4桁のものと同じ長さにするためにゼロ(「0」)を前置する4桁未満長く必要であること。そのように、標準的な比較器は現在1になり、列1が最初に出てくる文字列2の1 charに0される文字列の1文字1を比較します。

キーは10進数と

のようになります。
7.08
9.1
11.12
17.18
19.20

、必要に応じて文字列に変換し、フォーマットます。

    Dim sl As New SortedList(Of Decimal, Object)
    'sample data
    For x As Integer = 7 To 20 Step 2
        sl.Add(CDec(x + ((x + 1) / 100)), New Object)
    Next

    Dim aKey As Decimal
    Dim slotStart As DateTime = #1:00:00 PM#
    Dim slotEnd As DateTime = #2:00:00 PM#

    aKey = CDec(slotStart.Hour + (slotEnd.Hour / 100))
    sl.Item(aKey) = New Object
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top