根据其他列表的结果计算的 TimeSpan 列表
List of TimeSpan calculated by results from other list
我正在尝试基于另一个列表创建一个列表。该列表看起来像 -
{T1, T1, T2, T2, T3, T3}
但是,整数可能会根据用户输入进行更改。我试图根据旧列表的索引在新列表上分配一个 TimeSpan
值,整数会改变结果。例如,如果开始时间指定为 11:00,而用户指定的时间间隔为 5(分钟),则新列表应如下所示 - {11:00, 11:00, 11:05, 11:05, 11:10; 11:10}
这是我当前的函数:
public List<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
List<string> timeList = new List<string>();
string timeToAddString;
for (int i = 0; i < heatList.Count; i++)
{
if (heatList[i].Contains("1"))
{
TimeSpan timeToAdd = startTimeSpan;
timeToAddString = Convert.ToString(timeToAdd);
timeList.Add(timeToAddString);
}
else
{
string resultString = Regex.Match(heatList[i], @"\d+").Value;
int resultInt = Int32.Parse(resultString);
timeGap = TimeSpan.FromMinutes(timeGap.Minutes * resultInt);
TimeSpan timeToAdd = startTimeSpan + timeGap;
timeToAddString = Convert.ToString(timeToAdd);
timeList.Add(timeToAddString);
}
}
}
我希望新列表根据列表中每个字符串中的整数对应热列表中的值,并生成时间跨度或一天中的时间以在新列表中与之对应。
使用 LINQ
return heatList
.Select(t => TimeSpan.FromTicks(
(Int32.Parse(t.Substring(1))-1) * timeGap.Ticks
)
+ startTimeSpan).ToString("hh:mm")
.ToList();
解释:
.Select(t => ...)
枚举 heatList 中的字符串,将每个温度分配给 t
。
t.Substring(1)
跳过 "T123" 中的 "T"。
Int32.Parse(t.Substring(1)) - 1
创建数字范围 0, 1, 2 ...
* timeGap.Ticks
以滴答为单位给出给定温度的偏移量。
TimeSpan.FromTicks(...) + startTimeSpan)
通过添加时间跨度得出结果时间。
.ToString("hh:mm")
将生成的时间跨度转换为字符串。
.ToList();
创建一个新列表。
刻度是 TimeSpan
用于在内部存储时间跨度的单位。
你可以用简单的 linq 语句做到这一点
public static List<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
return heatList
.Select(x =>
startTimeSpan.Add(TimeSpan.FromMinutes(timeGap.Minutes*(int.Parse(x.Substring(1)) - 1)))
.ToString(@"hh\:mm")).ToList();
}
这将从heatList
中select一项一项,解析其中的数字并从中减去1(所以T1
结果是0
和T2
在 1
和 ...) 中,现在将 timeGap
乘以结果数字添加到 startTimeSpan
并将其格式化为 hh:mm
格式。
这个函数可以变得更简单,假设 heatList 中的每个元素都遵循 T\d+
模式。
public IEnumerable<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
foreach (var element in heatList)
{
var input = element.Substring(1); // Takes everything from index 1 = the first digit in the string
int multiplier = Int32.Parse(input) - 1;
var additionalTime = new TimeSpan(0, (int)(timeGap.Minutes * multiplier), 0);
yield return (startTimeSpan + additionalTime).ToString();
}
}
示例用法:
string[] sBaseList = { "T1", "T1", "T2", "T2", "T4", "T6" };
var sList = sBaseList.ToList();
TimeSpan startSpan = new TimeSpan(11, 0, 0);
TimeSpan gapSpan = new TimeSpan(0, 5, 0);
var result = TimeGet(sList, startSpan, gapSpan);
foreach (var s in result)
Console.WriteLine(s);
Console.ReadKey();
结果:11:00:00、11:00:00、11:05:00、11:05:00、11:15:00、11:25:00。
namespace Test
{
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class MainClass
{
public static void Main (string[] args)
{
List<string> inputdata = new List<string> ();
List<TimeSpan> outputdata = new List<TimeSpan> ();
string input = null;
while ((input = Console.ReadLine ()) != string.Empty) {
inputdata.Add (input);
TimeSpan t = new TimeSpan (11, 0, 0) + new TimeSpan (0, Convert.ToInt32 (Regex.Match (input, "\d+").ToString ()), 0);
outputdata.Add (t);
}
for (int i = 0; i < inputdata.Count; i++) {
Console.WriteLine ("Inputdata: {0}, Outputdata: {1}", inputdata [i], outputdata [i].ToString ());
}
}
}
}
我正在尝试基于另一个列表创建一个列表。该列表看起来像 -
{T1, T1, T2, T2, T3, T3}
但是,整数可能会根据用户输入进行更改。我试图根据旧列表的索引在新列表上分配一个 TimeSpan
值,整数会改变结果。例如,如果开始时间指定为 11:00,而用户指定的时间间隔为 5(分钟),则新列表应如下所示 - {11:00, 11:00, 11:05, 11:05, 11:10; 11:10}
这是我当前的函数:
public List<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
List<string> timeList = new List<string>();
string timeToAddString;
for (int i = 0; i < heatList.Count; i++)
{
if (heatList[i].Contains("1"))
{
TimeSpan timeToAdd = startTimeSpan;
timeToAddString = Convert.ToString(timeToAdd);
timeList.Add(timeToAddString);
}
else
{
string resultString = Regex.Match(heatList[i], @"\d+").Value;
int resultInt = Int32.Parse(resultString);
timeGap = TimeSpan.FromMinutes(timeGap.Minutes * resultInt);
TimeSpan timeToAdd = startTimeSpan + timeGap;
timeToAddString = Convert.ToString(timeToAdd);
timeList.Add(timeToAddString);
}
}
}
我希望新列表根据列表中每个字符串中的整数对应热列表中的值,并生成时间跨度或一天中的时间以在新列表中与之对应。
使用 LINQ
return heatList
.Select(t => TimeSpan.FromTicks(
(Int32.Parse(t.Substring(1))-1) * timeGap.Ticks
)
+ startTimeSpan).ToString("hh:mm")
.ToList();
解释:
.Select(t => ...)
枚举 heatList 中的字符串,将每个温度分配给 t
。
t.Substring(1)
跳过 "T123" 中的 "T"。
Int32.Parse(t.Substring(1)) - 1
创建数字范围 0, 1, 2 ...
* timeGap.Ticks
以滴答为单位给出给定温度的偏移量。
TimeSpan.FromTicks(...) + startTimeSpan)
通过添加时间跨度得出结果时间。
.ToString("hh:mm")
将生成的时间跨度转换为字符串。
.ToList();
创建一个新列表。
刻度是 TimeSpan
用于在内部存储时间跨度的单位。
你可以用简单的 linq 语句做到这一点
public static List<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
return heatList
.Select(x =>
startTimeSpan.Add(TimeSpan.FromMinutes(timeGap.Minutes*(int.Parse(x.Substring(1)) - 1)))
.ToString(@"hh\:mm")).ToList();
}
这将从heatList
中select一项一项,解析其中的数字并从中减去1(所以T1
结果是0
和T2
在 1
和 ...) 中,现在将 timeGap
乘以结果数字添加到 startTimeSpan
并将其格式化为 hh:mm
格式。
这个函数可以变得更简单,假设 heatList 中的每个元素都遵循 T\d+
模式。
public IEnumerable<string> TimeGet(List<string> heatList, TimeSpan startTimeSpan, TimeSpan timeGap)
{
foreach (var element in heatList)
{
var input = element.Substring(1); // Takes everything from index 1 = the first digit in the string
int multiplier = Int32.Parse(input) - 1;
var additionalTime = new TimeSpan(0, (int)(timeGap.Minutes * multiplier), 0);
yield return (startTimeSpan + additionalTime).ToString();
}
}
示例用法:
string[] sBaseList = { "T1", "T1", "T2", "T2", "T4", "T6" };
var sList = sBaseList.ToList();
TimeSpan startSpan = new TimeSpan(11, 0, 0);
TimeSpan gapSpan = new TimeSpan(0, 5, 0);
var result = TimeGet(sList, startSpan, gapSpan);
foreach (var s in result)
Console.WriteLine(s);
Console.ReadKey();
结果:11:00:00、11:00:00、11:05:00、11:05:00、11:15:00、11:25:00。
namespace Test
{
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class MainClass
{
public static void Main (string[] args)
{
List<string> inputdata = new List<string> ();
List<TimeSpan> outputdata = new List<TimeSpan> ();
string input = null;
while ((input = Console.ReadLine ()) != string.Empty) {
inputdata.Add (input);
TimeSpan t = new TimeSpan (11, 0, 0) + new TimeSpan (0, Convert.ToInt32 (Regex.Match (input, "\d+").ToString ()), 0);
outputdata.Add (t);
}
for (int i = 0; i < inputdata.Count; i++) {
Console.WriteLine ("Inputdata: {0}, Outputdata: {1}", inputdata [i], outputdata [i].ToString ());
}
}
}
}