如何初始化对象的元组列表和对象的列表?

问题描述 投票:0回答:1

所以,我有这个科学怪人:

var unsorted = new List<(Hand, List<Card>)>();

而且当我尝试像这样添加smt时:

unsorted.Add((hand, _tempList));

我收到并出错

索引超出范围。必须为非负数并且小于集合的大小。 (参数“索引”)

如果我事先不知道将存储多少项目,如何正确初始化此列表?

根据评论请求:

_tempList = IsStraightFlush(theValueHand);
            if (_tempList.Count == 5)
            {
                unsorted.Add((hand, _tempList));
                continue;
            }

从列表中添加元组的功能

        private List<Card> IsStraightFlush(List<Card> hList)
        {
        var st = 0;
        _tempList.Clear();


        foreach (var t in hList)
        {
           ...
        }
        if (_tempList.Count < 5)
        {
            return new List<Card>();
        }

       hList = _tempList.ToList();
        _tempList.Clear();

        for (var i = 0; i < hList.Count - 2; i++)
        {
           ...
            if (st == 4)
            {
                _tempList.Add(hList[i + 1]);
                return _tempList;
            }
        }

        st = 0;
        _tempList.Clear();
        if (hList[0].Value == 13) //Ace through 5
            for (int i = hList.Count - 1, j = 0; i > 0; i--, j++)
            {
              ...
                if (st == 4)
                {
                    _tempList.Add(hList.First());
                    return _tempList.OrderBy(x => x.Value).ToList(); 
                }
            }
        return new List<Card>();
        }

以及当我使用它时

resultHands.AddRange(SortStraightFlushes(unsorted));

...

        private List<(int, Hand)> SortStraightFlushes(List<(Hand, List<Card>)> hList)
    {
        var sortedHList = hList.OrderBy(x => x.Item2[0].Value).ToList();
        List<(int, Hand)> output = new List<(int, Hand)>();
        for (int i = 0; i < sortedHList.Count; i++)
        {
            if(i != sortedHList.Count - 1)
                if (sortedHList[i].Item2[0].Value == sortedHList[i + 1].Item2[0].Value)
                    output.Add((1, sortedHList[i].Item1));
                else
                    output.Add((0, sortedHList[i].Item1));
            else
                output.Add((0, sortedHList[i].Item1));
        }
        return output;
    }
c# list tuples init
1个回答
0
投票

您在某些地方有以下几行

_tempList.Clear();

这是导致索引问题的行超出范围,因为您正在分配列表,然后清除它。

而不是清除它,将其更改为_tempList = new List of whatever u have

此行很可能是罪魁祸首

if (hList[0].Value == 13)

您清除了列表,然后尝试访问不存在的元素。

WHY因为当您将列表分配给另一个变量时,这是引用分配,并且对原始变量的任何更改也会更改第二个变量您分配给它

© www.soinside.com 2019 - 2024. All rights reserved.