我每秒更新数据生成数百万行,如下所示:
104500 4783
104501 8930
104502 21794
104503 21927
104505 5746
104506 9968
104509 5867
104510 46353
104511 7767
104512 4903
Run Code Online (Sandbox Code Playgroud)
左侧的列表示时间(hhmmss格式),右侧的列表示逐秒更新的数据.然而,正如你所看到的,它实际上不是秒,并且有一些缺失的时间(本例中缺少10:45:04,10:45:07,10:45:08).我的目标是添加丢失的秒数,并使用前一秒的数据来表示缺少的秒数,如下所示:
104500 4783
104501 8930
104502 21794
104503 21927
104504 21927 --
104505 5746
104506 9968
104507 9968 --
104508 9968 --
104509 5867
104510 46353
104511 7767
104512 4903
Run Code Online (Sandbox Code Playgroud)
我不想在结果中使用" - ",我只是把它们放在那里以标记添加的行.到目前为止,我已经尝试使用StreamReader和StreamWriter来实现这一点,但似乎他们不会得到我想要的东西.我是新手程序员和C#的新手,所以如果你能指出我正确的方向,那就太棒了.我真的只是想知道在C#中是否可以做到这一点......我花了很多时间在MSDN上,在这里寻找解决方案,但到目前为止还没有找到任何解决方案.
编辑:行在文本文件中,我想将新创建的数据存储在新的文本文件中.
我有一行代码如下:
List<string>[] apples = new List<string>()[2];
Run Code Online (Sandbox Code Playgroud)
其目的只是创建一个List对象数组.当我尝试编译我的代码时,上面的行会生成此错误:
无法将类型'string'隐式转换为'System.Collections.Generic.List []
我没有找到很多关于创建List对象数组(实际上只有这个线程)的主题,可能是因为没有搜索引擎会搜索括号.
创建列表集合的唯一方法是将它们放在另一个列表中,如下所示?
List<List<string>> apples = new List<List<string>>(); //I've tried this and it works as expected
Run Code Online (Sandbox Code Playgroud)
感谢您的任何建议,我真的很好奇为什么第一行代码(List []示例)不起作用.
假设我定义了以下方法:
int ReturnNumber(int number)
{
return number;
}
Run Code Online (Sandbox Code Playgroud)
现在,让我们说我还定义了以下两种方法; 常规方法:
void Print(Func<int, int> function)
和扩展方法:
static void Print(this Func<int, int> function)
我可以这样称呼前者:
Print(ReturnNumber); // Regular method call, seems to implicitly convert ReturnNumber to Func<int, int>
但我不能用后者做到这一点:
ReturnNumber.Print(); // Extension method call, does not seem to do the implicit conversion -- results in compiler error
虽然我可以这样做:
((Func<int, int>)ReturnNumber).Print(); // I perform the conversion explicitly
我假设当你将一个方法作为参数传递给另一个方法时会发生一些"魔法",并且编译器因此能够猜测它应该尝试将其转换ReturnNumber为Func<int, int>,而编译器不会执行任何操作扩展方法这样的事情.它是否正确?我的问题可以概括为:为什么你不能在方法上调用扩展方法,而你可以在委托实例上调用扩展方法?它是否与编译器不将方法视为对象这一事实有关,而只是将委托视为对象?
我Lists在C#中使用时遇到了一些令人困惑的行为.如果我添加一个集合(我既测试List<T>和Array给定类型的)到List(即List<List<int>>),修改的孩子List也将修改父的内容,List它被添加到.但是,如果我添加一个不是集合(即a bool或a int)List的对象,则修改对象本身不会修改List添加它的内容.我在下面提供了一些示例代码:
List<List<int>> intList = new List<List<int>>();
List<int> ints = new List<int>();
ints.Add(12345);
intList.Add(ints);
Console.WriteLine(intList[0].Count); //intList[0].Count is 1
ints.Clear();
Console.WriteLine(intList[0].Count); //intList[0].Count is 0
Run Code Online (Sandbox Code Playgroud)
看起来在上面的例子中,ints集合只是"映射"到了intList[0],所以当你修改ints集合本身时,你也在修改intList[0],因为它们是同一个对象.这与下一个例子形成对比:
List<bool> boolList = new List<bool>();
bool bigBool = false;
boolList.Add(bigBool);
Console.WriteLine(boolList[0]); //boolList[0] is false
bigBool = true;
Console.WriteLine(boolList[0]); //boolList[0] is...still false??
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,似乎不是映射到boolList[0],bigBool而是COPIED boolList[0] …