-2

配列内の要素の宣言数を回避するために上記の配列をリストに変換したいのですが、リストで同じことを行おうとすると、インデックスの範囲外の例外が発生することは明らかであるため、それを達成できません..一日中試してみました。問題が発生しているロジックの一部をここに貼り付けました。基本クラスの関数に対して再帰呼び出しが行われます(これは、この質問に答えることは重要ではありませんが、明確にするだけです)。私を助けてください。

    int[] arr = new int[100];        
    Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();        

    public override int function(int length, out List<int> cuts)
    {
        cuts = new List<int>();
        if (length < 0)
            return 0;

        if (arr[length] == 0 )
        {
            arr[length] = base.Function(length, out cuts);
            dict.Add(arr[length], cuts);                                
        }
        cuts = dict[arr[length]];
        return arr[length];
    }
4

2 に答える 2

0

「動的に拡張された」リストのlength(である必要があります)がインデックス(この場合は「長さ」)よりも小さい場合は、リストを展開するだけです。index

List<int> arr = new List<int>();        
Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();        

public override int function(int length, out List<int> cuts)
{
    cuts = new List<int>();
    if (length < 0)
        return 0;

    if (arr.Count <= length)
    {
        arr.AddRange(new int[(length + 1) - arr.Count])
    }

    if (arr[length] == 0 )
    {
        arr.Insert(length,base.Function(length, out cuts));
        dict.Add(arr[length], cuts);                                
    }
    cuts = dict[arr[length]];
    return arr[length];
}
于 2012-12-07T07:38:27.580 に答える
0

サイズなしで配列を作成することはできません。そのためにはリストを使用する必要があります。

配列を使用する特別な理由がない場合は、リストを使用することをお勧めします。

List<int> arr = new List<int>();

そして最後に、それを配列に変換することもできます:

int[] s = arr.ToArray();
于 2012-12-07T07:24:02.607 に答える