C# 将分隔文件的读取从F转换为C
我知道这是一个很难回答的问题,但我正试图在F和C之间进行一些比较,并从C程序中借用了一个F脚本,试图从C程序中获得相同的操作,以测试操作和语法。这部分是在一个更大的脚本中,我正在将其转换为一个F程序,该程序对给定数据执行k均值分析 以下是F部分:C# 将分隔文件的读取从F转换为C,c#,csv,f#,f#-data,C#,Csv,F#,F# Data,我知道这是一个很难回答的问题,但我正试图在F和C之间进行一些比较,并从C程序中借用了一个F脚本,试图从C程序中获得相同的操作,以测试操作和语法。这部分是在一个更大的脚本中,我正在将其转换为一个F程序,该程序对给定数据执行k均值分析 以下是F部分: let elections = let file = @"C:\Users\Deines\Documents\Election2008.txt" let fileAsLines = File.ReadAllLines(f
let elections =
let file = @"C:\Users\Deines\Documents\Election2008.txt"
let fileAsLines =
File.ReadAllLines(file)
|> Array.map (fun line -> line.Split(','))
let dataset =
fileAsLines
|> Array.map (fun line ->
[| Convert.ToDouble(line.[1]);
Convert.ToDouble(line.[2]);
Convert.ToDouble(line.[3]) |])
let labels = fileAsLines |> Array.map (fun line -> line.[4])
dataset, labels
以下是data Election2008.txt的示例:
AL,32.7990,-86.8073,4447100,REP
AK,61.3850,-152.2683,626932,REP
AZ,33.7712,-111.3877,5130632,REP
AR,34.9513,-92.3809,2673400,REP
CA,36.1700,-119.7462,33871648,DEM
CO,39.0646,-105.3272,4301261,DEM
CT,41.5834,-72.7622,3405565,DEM
DE,39.3498,-75.5148,783600,DEM
DC,38.8964,-77.0262,572059,DEM
FL,27.8333,-81.7170,15982378,DEM
您可以通过以下方式在C中执行相同的基本操作:
Tuple<double[][], string[]> GetElections()
{
var file = @"C:\Users\Deines\Documents\Election2008.txt";
var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
var dataset = fileAsLines.Select(line => new[]
{
Convert.ToDouble(line[1]),
Convert.ToDouble(line[2]),
Convert.ToDouble(line[3])
}).ToArray();
var labels = fileAsLines.Select(line => line[4]).ToArray();
return Tuple.Create(dataset, labels);
}
也就是说,C开发人员很少以这种方式编写。更可能的情况是,您会创建一个自定义类型,用name+值保存结果,并以这种方式读取,即:
class ElectionResult
{
public ElecationResult(string label, double x, double y, int amount)
{
this.Label = label;
this.Point = new Point(x,y);
this.Amount = amount;
}
string Label { get; private set; }
Point Location { get; private set; }
int Amount { get; private set; }
}
IList<ElectionResult> GetElectionResults()
{
var file = @"C:\Users\Deines\Documents\Election2008.txt";
var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
return fileAsLines.Select(line => new ElectionResult(line[4],
Convert.ToDouble(line[1]),
Convert.ToDouble(line[2]),
Convert.ToInt32(line[3]))
.ToList();
}
这使得它对典型的C开发人员更有用,因为没有模式匹配来从元组结果中提取数组。您可以通过以下方式在C中执行相同的基本操作:
Tuple<double[][], string[]> GetElections()
{
var file = @"C:\Users\Deines\Documents\Election2008.txt";
var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
var dataset = fileAsLines.Select(line => new[]
{
Convert.ToDouble(line[1]),
Convert.ToDouble(line[2]),
Convert.ToDouble(line[3])
}).ToArray();
var labels = fileAsLines.Select(line => line[4]).ToArray();
return Tuple.Create(dataset, labels);
}
也就是说,C开发人员很少以这种方式编写。更可能的情况是,您会创建一个自定义类型,用name+值保存结果,并以这种方式读取,即:
class ElectionResult
{
public ElecationResult(string label, double x, double y, int amount)
{
this.Label = label;
this.Point = new Point(x,y);
this.Amount = amount;
}
string Label { get; private set; }
Point Location { get; private set; }
int Amount { get; private set; }
}
IList<ElectionResult> GetElectionResults()
{
var file = @"C:\Users\Deines\Documents\Election2008.txt";
var fileAsLines = File.ReadLines(file).Select(line => line.Split(','));
return fileAsLines.Select(line => new ElectionResult(line[4],
Convert.ToDouble(line[1]),
Convert.ToDouble(line[2]),
Convert.ToInt32(line[3]))
.ToList();
}
这使得它对典型的C开发人员更有用,因为没有模式匹配来从元组结果中提取数组。请了解此网站的操作方式。我们不是来执行通用代码翻译服务的。如果您打算经常使用此类数据,请查看F类型提供程序。有一个专门用于CSV数据。它可以解析输入数据,分析它,并为您生成类型。请与此网站如何运作。我们不是来执行通用代码翻译服务的。如果您打算经常使用此类数据,请查看F类型提供程序。有一个专门用于CSV数据。它可以解析输入数据,分析它,并为你生成类型。你太棒了,谢谢你,这就是我要找的。我会在测试中运行这个,看看我们如何进行。啊,你打败了我。标签选择可能需要一个选择多。虽然@ AlexBeisley不应该-它是每行的一个标签…哦,并且可以考虑EnUM {DEM,ReP,…}但是认真地,为了你自己,只使用FYou是伟大的,谢谢你这是我正在寻找的。我会在测试中运行这个,看看我们如何进行。啊,你打败了我。标签选择可能需要一个选择多。虽然@ AlexBeisley不应该——它是每行的一个标签…哦,并且可以考虑EnUM {DEM,ReP,…},但是认真地,为了你自己,只使用F。