使用通过';找到的值;.包含';
本文关键字:包含 | 更新日期: 2023-09-27 18:29:08
这是一个控制台单位转换程序,它接受用户指定的测量单位(如磅、盎司),然后是第二个测量单位,最后是一个从一个单位转换为另一个单位的值。
string userUnit1, userUnit2 = "";
int userValue = 0;
可以使用的单位在文本文件中指定,文本文件的内容在程序中被拆分为字符串数组(称为"单位")。文本文件还包含两个单位之间的"转换值"。在文本文件中,它们看起来是这样的:盎司,克,28.0(因为一盎司中有28克,所以这个值也被放入数组中)。
用户输入的单位用以下代码片段进行检查:
double result = 0;
if (units.Contains(userUnit1) && units.Contains(userUnit2))
{
//??? Something like:
//result = userValue */ value in the array element;
}
上面的基本IF语句检查数组中用户输入的单位,我想做的是使用该数组元素中的转换值来转换用户输入的数字。我该怎么做?
EDIT:这是用于将拆分的文本存储到数组中的代码。
using (read = new StreamReader("C:/Users/Sam Smith/Desktop/convert.txt"))
{
while (!read.EndOfStream)
{
lineFromFile = read.ReadLine();
lineFromFile.Split(' ');
foreach (int i in lineFromFile)
{
count++;
if (count % 3 == 0)
{
units.Add(lineFromFile);
}
}
}
}
类似的东西?
String path = @"C:'Users'Sam Smith'Desktop'convert.txt";
var lines = System.IO.File.ReadLines(path)
.Where(l => l.Contains(userUnit1) && l.Contains(userUnit2));
if(lines.Any())
{
var unit = lines.First();
var parts = unit.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries);
var result = userValue * double.Parse(parts[2]);
}
您需要引用Enumerable.Where的System.Linq
命名空间。您可以使用File.ReadLines
以IEnumerable<string>
的形式检索文件中的所有行。
在unit1Index和unit2Index中使用IndexOf方法并与-1进行比较以确保找到它们,或者使用FirstOrDefault扩展方法并与null进行比较。
听起来你也应该用它做一个dictionay,这会用TryGetValue简化它。
var conversionsDic = File.ReadAllLines("conversions.txt")
.Select(l => l.Split(' '))
.ToDictionary(ls => ls[0] + ls[1], ls => double.Parse(ls[2]));
double conversion;
if (conversionsDic.TryGetValue(userUnit1 + userUnit2, out conversion))
{
// use 'conversion' to do whatever
var result = userValue * conversion;
}