gpt4 book ai didi

arrays - vb.net 获取数组的第一行和最后一行的 *values*

转载 作者:行者123 更新时间:2023-12-04 00:06:59 24 4
gpt4 key购买 nike

我有一个这样的数字数组:

{10 20 30 40 50 60 70 80 90}

开始和结束的数字并不总是相同的(事实上它们都不会相同)。

我想获取第一个和最后一个条目的(不是索引)。

所以在上面的例子中,我感兴趣的只是值“10”和“90”。

这个数组是由一个逗号分隔的文本文件构成的,看起来像这样:

10,3.456
20,3.588
30,3.640
40,3.790
50,3.850
60,3.680
70,3.480
80,3.280
90,3.765

这是我的代码:

    Dim arrName, arrValue As New List(Of String)()
Dim sdata() As String
Dim column1, column2 As Decimal

For Each line As String In IO.File.ReadAllLines("c:\file.txt")
If line <> "" And Not line.StartsWith("#") Then
sdata = line.Split(","c)
arrName.Add(sdata(0).Trim())
arrValue.Add(sdata(1).Trim())
' get data from array
column1 = sdata(0)
column2 = sdata(1)
End If
Next

所以我想要的是能够创建两个变量,其中:

column1Lowest=<the lowest value> (in this case 10)
column1Highest=<the highest value> (in this case 90)

我尝试了几种方法,但我似乎每次都返回整个数组,或“-1”(在我知道的数组中找不到匹配项)。

我尝试过的东西:IndexOf()、FirstIndexOf()、LastIndexOf()

我只对 column1 中的最低值和最高值感兴趣(但我仍然在其他地方使用其他值)。

我现在没有主意了。

请帮助 - 以新手可以理解的形式给出答案。

谢谢。

编辑:

为了在下面添加史蒂夫的答案,我尝试了 Inumerable strings 选项,但我相信我的文件格式遇到了问题 - 有些文件很好 - 有些不是(通常文件在最后一行数据之后没有换行符!)。

这是我的代码:

Dim Lines As Collections.Generic.IEnumerable(Of String) = File.ReadLines("c:\file.txt").Where(Function(q) q.StartsWith("#") = False)
Line0 = Lines.FirstOrDefault
LineN = Lines.LastOrDefault
lowestNum = Line0.Split(New Char() {","c})
highestNum = LineN.Split(New Char() {","c})
lowNum = lowestNum(0)
highNum = highestNum(0)

等等。

所以如果我想在我已经解析的文件上使用这段代码 - 我将如何使用现有的数组呢?

我刚试过:

Dim Lines As Collections.Generic.IEnumerable(Of String) = {column1}
FirstValue = Lines.FirstOrDefault
LastValue = Lines.LastOrDefault

但这仍然会打印整个数组?

显示我正在使用的输出:

    ListBox2.Items.Add(FirstValue)
ListBox1.Items.Add(LastValue)

我尝试在“For Each”循环内外插入列表框代码。将它们放在外面会给我带来变量问题 - 所以我试图在循环之外声明变量无济于事。

我确实说过我是新手!

最佳答案

有这些漂亮的IEnumerable extensions你可以使用

Dim first = numbers.First()
Dim last = numbers.Last()

但是,您的问题尚不清楚您是只想要数组的第一个和最后一个元素还是数组中的最高和最低值。

对于第二种情况

Dim high = numbers.Max()
Dim low = numbers.Min()

我还注意到您使用字符串来管理这些值,但是如果它们是数字并且您想检索最高和最低的数字,那么您绝对应该将这些值转换为整数,否则您将很难解释您的计算机上的字符串“100”高于字符串“20”。

编辑
循环遍历您的行并将每一行转换为小数,然后获取最小值和最大值(注意,不检查输入的正确性)

Dim names = new List(Of Decimal)()
Dim values = new List(Of Decimal)()
For Each line As String In IO.File.ReadAllLines("c:\file.txt")
If line <> "" And Not line.StartsWith("#") Then
sdata = line.Split(","c)
names.Add(Convert.ToDecimal(sdata(0).Trim()))
values.Add(Convert.ToDecimal(sdata(1).Trim()))
End If
Next
Dim lowValue = names.Min()
Dim highValue = names.Max()

关于arrays - vb.net 获取数组的第一行和最后一行的 *values*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38350821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com