0

重複の可能性:
Dictionary から n 番目の要素を取得するにはどうすればよいですか?

辞書からキー名を取得する必要があります。 Dictionary から n 番目の要素を取得するにはどうすればよいですか? 救済策はありません。

Dictionary<string, string> ListDegree= new Dictionary<string,int>();
ListDegree.Add( 'ali', 49);
ListDegree.Add( 'veli', 50);

インデックス付きの「ali」を取得したい。次のコードは値「324」を取得します。どうすればよいですか?

int i=-1;
foreach (var item in ListDegree)
{
    i++;
}
if (i == -1)
    mf.txtLog.AppendText("Error: \"Code = 1\"");
else
    mf.txtLog.AppendText("Error: \""+ListDegree[ListDegree.Keys.ToList()
        [i]].ToString()+"\"");
4

4 に答える 4

1

Odedが指摘したように、なぜ OrderedDictionary を使用しないのです? 以下にサンプルを示します。

using System;
using System.Collections.Specialized;

namespace ConsoleApplication1
{
    class ListDegree:OrderedDictionary
    {
    }

    class Program
    {
        public static void Main()
        {
            var _listDegree = new ListDegree();
            _listDegree.Add("ali", 324);
            _listDegree.Add("veli", 553);

            int i = -1;
            foreach (var item in _listDegree)
            {
                i++;
            }
            if (i == -1)
                Console.WriteLine("Error: \"Code = 1\"");
            else
                Console.WriteLine("Error: \"" + _listDegree[i] + "\"");
        }
    }
}
于 2012-11-28T10:04:29.777 に答える
1
public TKey GetNthKeyOf<TKey,TValue>(Dictionary<TKey,TValue> dic, n)
{
    int i = 0;
    foreach(KeyValuePair kv in dic)
    {
       if (i==n) return kv.Key;
       i++;
    }
    throw new IndexOutOfRangeException();
}

*編集*

public static class DicExt
{
    public static TKey GetNthKeyOf<TKey,TValue>(this Dictionary<TKey,TValue> dic, n)
    {
        int i = 0;
        foreach(KeyValuePair kv in dic)
        {
           if (i==n) return kv.Key;
           i++;
        }
        throw new IndexOutOfRangeException();
    }
}

*編集 2 * @tomfanning が言ったように、Dictionary は注文に関する保証を提供しないため、私の解決策は偽の解決策であり、意味がありません。

于 2012-11-28T10:03:11.117 に答える
0
mf.txtLog.AppendText("Hata: \"" + anchorPatternClass.GetNthKeyOf(i).ToString() + "\"");
......
    public TKey GetNthKeyOf<TKey,TValue>(Dictionary<TKey,TValue> dic, n)
    {
        int i = 0;
        foreach(KeyValuePair kv in dic)
        {
           if (i==n) return kv.Key;
           i++;
        }
        throw new IndexOutOfRangeException();
    }
于 2012-11-28T10:29:38.613 に答える
0

N 番目の要素で辞書にアクセスするのは奇妙に思えますが、次のようになります。

int N=.....
var val = ListDegree.SkipWhile((kv, inx) => inx != N)
                    .Select(kv => kv.Value)
                    .First();
于 2012-11-28T10:49:48.420 に答える