首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将基础值插入不存在的索引中

将基础值插入不存在的索引中
EN

Stack Overflow用户
提问于 2012-09-10 05:13:01
回答 1查看 697关注 0票数 0

我正在尝试解决一个简单的算法,一种特定的方法,它获取当前行,并将其添加到最顶端的行。我知道有很多方法可以解决这个问题,但目前我有一个逐行读取的文本文件。每一行都被转换成一个sbyte (我使用sbyte有一定的原因,但它与我的帖子无关,我不会在这里提到它),并添加到一个列表中。从那里,该行被反转并添加到另一个列表中。下面是我为第一部分准备的代码:

代码语言:javascript
复制
        List<List<sbyte>> largeNumbers = new List<List<sbyte>>();
        List<string> total = new List<string>();
        string bigIntFile = @"C:\Users\Justin\Documents\BigNumbers.txt";


        string result;

        StreamReader streamReader = new StreamReader(bigIntFile);

        while ((result = streamReader.ReadLine()) != null)
        {
            List<sbyte> largeNumber = new List<sbyte>();
            for (int i = 0; i < result.Length; i++)
            {
                sbyte singleConvertedDigit = Convert.ToSByte(result.Substring(i, 1));
                largeNumber.Add(singleConvertedDigit);
            }
            largeNumber.Reverse();
            largeNumbers.Add(largeNumber);
        }

在那里,我想使用一个存储字符串的空列表,稍后我将使用这些字符串来添加我的数字。但是,我希望能够将数字添加到这个名为"total“的新列表中。我要添加到其中的数字的长度并不完全相同,因此,我需要检查某个位置是否存在索引,如果存在,我会将查找到的值与该索引中的数字相加,如果不存在,则需要创建该索引,并将其值设置为0。在尝试这样做的过程中,我总是得到一个IndexOutOfRange异常(显然是因为该索引不存在)。:

代码语言:javascript
复制
        foreach (var largeNumber in largeNumbers)
        {
            int totalIndex = 0;

            foreach (var digit in largeNumber)
            {
                if (total.Count == 0)
                {
                    total[totalIndex] = digit.ToString(); //Index out of Range exception occurs here
                }
                else
                {
                    total[totalIndex] = (Convert.ToSByte(total[totalIndex]) + digit).ToString();
                }

                totalIndex ++;
            }
        }

我只是有点不知所措。关于如何检查该索引是否存在;如果它没有创建索引并将其基础值设置为0,有什么想法吗?这对我来说只是一个有趣的练习,但我遇到了一个可爱的索引部分的砖墙。我尝试过使用SingleOrDefault和ElementAtOrDefault,但它们对我来说似乎不是很好用。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-10 05:29:21

根据你的结果是否有少量的缺失元素(例如,有超过50%的元素缺失),考虑简单地将0添加到列表中,直到你达到必要的索引。如果您关心项是否丢失,则可以使用可空项列表(即List<int?>)而不是常规值(List<int>)。

类似于(非编译的...)示例:

代码语言:javascript
复制
// List<long> list; int index; long value
if (index >= list.Count) 
{
  list.AddRange(Enumerable.Repeat(0, index-list.Count+1);
}
list[index] = value;

如果缺少大量元素,请使用带有(索引、值)对的字典(或SortedDictionary)。

代码语言:javascript
复制
Dictionary<int, long> items;
if (items.ContainsKey(index))
{ 
  items[key] = value;
}
else
{
  items.Add(index, value);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12343034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档