【问题标题】:Using the value found through '.contains'使用通过“.contains”找到的值
【发布时间】:2012-03-25 20:59:47
【问题描述】:

这是一个控制台单位转换程序,它接受用户指定的测量单位(如磅、盎司),然后是第二个测量单位,最后是一个从一个单位转换为另一个单位的值。

string userUnit1, userUnit2 = "";
int userValue = 0;

可以使用的单位在文本文件中指定,其内容在程序中被拆分为字符串数组(称为“单位”)。文本文件还包含两个单位之间的“转换值”。在文本文件中,它们显示为:ounce,gram,28.0(因为一盎司有 28 克,所以这个值也放入数组中)。

用户输入的单位用下面的sn-p代码检查:

double result = 0;

if (units.Contains(userUnit1) && units.Contains(userUnit2))
{
    //??? Something like:
    //result = userValue */ value in the array element;
}

上面的基本 IF 语句检查用户输入的单位的数组,我想做的是使用该数组元素中的转换值来转换用户输入的数字。我该怎么办?

编辑:这是将分割文本存储到数组中的代码。

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);
                        }
                    }
                }
            }

【问题讨论】:

  • 您使用的拆分方法不正确。将返回值保存到字符串数组中并迭代数组。而且整个功能没有多大意义……

标签: c# arrays


【解决方案1】:

这样的?

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.WhereSystem.Linq 命名空间的引用。您可以使用File.ReadLinesIEnumerable<string> 检索文件中的所有行。

【讨论】:

  • .哪里不可用,有没有特定的系统命名空间供它使用?
  • 是的,System.Linq (Enumerable.Where)。我觉得您必须改为乘以该值(相应地进行编辑)。
  • @BoggyB 添加对 System.Linq 的引用,然后查看我的答案 :)
【解决方案2】:

对 unit1Index 和 unit2Index 使用 IndexOf 方法并与 -1 进行比较以确保找到它们,或者使用 FirstOrDefault 扩展方法并与 null 进行比较。

听起来你应该用它来制作一个字典,这将使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2021-04-03
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多