-1

ここでの私の解決策: http://www.mediafire.com/?rzrhvc71musz793
238 行目のファイル Apriori.cs で、「追加情報: インデックスが範囲外でした。負でなく、コレクションのサイズよりも小さい必要があります」というエラーが表示されます。

private List<Rule> GenerateRules()
{
    var rules = new List<Rule>();

    foreach (var item in _allFrequentItems)
    {
        if (item.val.Count > 1)
        {
            int maxCombinationLength = item.val.Count / 2;
            GenerateCombination(item.val, maxCombinationLength, ref rules);
        }
    }

    return rules;
}
private void GenerateCombination(List<int> item, int combinationLength, ref List<Rule> rules)
{
    int itemLength = item.Count;

    switch (itemLength)
    {
        case 2:
            AddItem(new List<int>(){item[0]}, item, ref rules);
            break;
        case 3:
            for (int i = 0; i < itemLength; i++)
            {
                AddItem(new List<int>{item[i]}, item, ref rules);
            }
            break;
        default:
            for (int i = 0; i < itemLength; i++)
            {
                GetCombinationRecursive(new List<int>() { item[i] }, item, combinationLength, ref rules);
            }
            break;
    }
}

GenerateRules() で item.val.Count>1 をチェックし、GenerateCombination itemLength = item.Count ..なぜ私のデバッグで item.Count =1 、 itemLength =3 ????

4

1 に答える 1

1

リストは参照型です。したがって、iteminGetRemainingメソッドを変更すると、元のリストから要素が削除されます。

for (int i = 0; i < itemLength; i++)
{
    AddItem(new List<int>{item[i]}, item, ref rules);
}

i = 0、項目から 1 つの要素を削除します。item.Count = 2;

i = 1、さらにいくつかの要素を削除します。item.Count = 1;

i = 2; にアクセスしようとしましitem[2]たが、要素が 1 つしかありません

于 2012-11-14T08:36:50.573 に答える