C# 平均值,最大值,最小值,从字符串求和?

C# 平均值,最大值,最小值,从字符串求和?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,您好,我得到了字符串数组,它们是我自己制作的持续时间,格式为H:M:S:MS 示例字符串: 0:0:4:410 0:0:1:425 0:0:1:802 0:0:1:509 0:0:1:674 0:0:1:628 0:0:2:76 如何求和/avg/min/maxarraylist中这些项目的值 Arraylist名称为arrayLL 我是c#新手,希望有人能教我如何使用字符串 添加到数组中的函数是: if (Session["DT"].ToString() != "") { TimeS

您好,我得到了字符串数组,它们是我自己制作的持续时间,格式为
H:M:S:MS

示例字符串:

0:0:4:410
0:0:1:425
0:0:1:802
0:0:1:509
0:0:1:674
0:0:1:628
0:0:2:76
如何求和/avg/min/maxarraylist中这些项目的值

Arraylist名称为
arrayLL

我是c#新手,希望有人能教我如何使用字符串

添加到数组中的函数是:

if (Session["DT"].ToString() != "")
{
    TimeSpan ts = ((DateTime)Session["DT2"]).Subtract((DateTime)Session["DT"]);

    Session["TimeL"] = ts.Hours.ToString() + ":" 
                            + ts.Minutes.ToString() + ":"
                            + ts.Seconds.ToString() + ":" 
                            + ts.Milliseconds.ToString();
}

因为我猜它们是持续时间,所以我想你应该这样做

var enu_ts = yourvariable.OfType<string>().Select(x => 
             TimeSpan.Parse(x, @"h\:m\:s\:fff", CultureInfo.InvariantCulture));


假设这些数字代表小时、分钟、秒和毫秒,您可以尝试以下操作:

// Empty list you will populate:
List<int> durationsInMilliseconds = new List<int>();

// Loop through your existing data, and calculate all
// durations into milliseconds:
foreach (string word in yourDurationArray)
{
    string[] values = s.Split(':');
    int hoursAsMilliseconds = Integer.parse(values[0]) * 60 * 60 * 1000;
    int minutesAsMilliseconds = Integer.parse(values[1]) * 60 * 1000;
    int secondsAsMilliseconds = Integer.parse(values[2]) * 1000;

    int sumDurationAsMilliseconds = hoursAsMilliseconds + 
                                    minutesAsMilliseconds + 
                                    secondsAsMilliseconds + 
                                    Integer.parse(values[3]);

    durationsInMilliseconds.add(sumDurationAsMilliseconds);
}
//您将填充的空列表:
List DURATIONSINMILESS=新列表();
//循环查看现有数据,并计算所有
//持续时间(毫秒):
foreach(yourDurationArray中的字符串字)
{
字符串[]值=s.Split(“:”);
int hoursAsMilliseconds=Integer.parse(值[0])*60*60*1000;
int minutesamillseconds=Integer.parse(值[1])*60*1000;
int secondsasmilless=Integer.parse(值[2])*1000;
int sumDurationAsmillseconds=hoursAsMilliseconds+
分钟数毫秒+
秒毫秒+
parse(值[3]);
持续时间毫秒。添加(sumDurationAsMilliseconds);
}
现在,您应该有一个Integer类型的列表(
DurationsInMillissions
),其中包含单个可比较格式的数字。有了这个,你应该可以做任何你需要的计算

(注:如果您需要与原始输入数据格式相同的结果,则必须添加一个操作,以从毫秒计算回小时、分钟和秒。

foreach(日期字符串中的字符串s)
{
span列表[i]=TimeSpan.Parse(s);
总计=总计。添加(spanList[i++]);
}
Write(“Max TimeSpan:+spanList.Max());
Write(“Min TimeSpan:+spanList.Min());
响应。写入(“时间跨度的总和:+Total”);

这些值的含义是什么?它们是持续时间吗?您需要将字符串拆分为组件,然后将子字符串转换为数值。一旦你这样做了,你可以平均,求和,等等。这些值代表什么,你能举个例子说明什么是和吗。。。。你想计算吗?你是怎么得到这个值的?也许这可以帮助我们重新创建它们。它们是我自己用H:M:S:MSN.B格式制作的持续时间。您可以使用
TimeSpan.ParseExact(单词“h\\:m\\\:s\\\:fff”,null)。totalmillizes
而不是您的拆分和求和。尽管正如Jon Skeet在另一个问题中指出的那样,
fff
将在毫秒只有两位数字时失败,替代的
fff
将不会失败,但会给出错误的答案。考虑到字符串的组装方式,拆分/计数可能是最好的答案。
var max = enu_ts.Min().ToString();
// Empty list you will populate:
List<int> durationsInMilliseconds = new List<int>();

// Loop through your existing data, and calculate all
// durations into milliseconds:
foreach (string word in yourDurationArray)
{
    string[] values = s.Split(':');
    int hoursAsMilliseconds = Integer.parse(values[0]) * 60 * 60 * 1000;
    int minutesAsMilliseconds = Integer.parse(values[1]) * 60 * 1000;
    int secondsAsMilliseconds = Integer.parse(values[2]) * 1000;

    int sumDurationAsMilliseconds = hoursAsMilliseconds + 
                                    minutesAsMilliseconds + 
                                    secondsAsMilliseconds + 
                                    Integer.parse(values[3]);

    durationsInMilliseconds.add(sumDurationAsMilliseconds);
}
foreach(string s in dateString)
{
   spanList[i] = TimeSpan.Parse(s);
   total=total.Add(spanList[i++]);
}

Response.Write("Max TimeSpan:"+spanList.Max<TimeSpan>());
Response.Write("Min TimeSpan:" + spanList.Min<TimeSpan>());
Response.Write("Total Sum of TimeSpan:"+total);