看来toSeq
Scala集合中的方法返回一个scala.collection.Seq
,我也可以返回一个Traversable
或者Iterable
需要将其转换为a scala.collection.immutable.Seq
.
是否有捷径可寻?
谢谢理查德
我试图在表中选择两列(ID和状态).该表应显示每个ID的最大值的状态.我尝试过其他几个例子但似乎没什么用.
原始数据结构:
ID state value (FLOAT)
1 TX 921,294,481
1 SC 21,417,296
1 FL 1,378,132,290
1 AL 132,556,895
1 NC 288,176
1 GA 1,270,986,631
2 FL 551,374,452
2 LA 236,645,530
2 MS 2,524,536,050
2 AL 4,128,682,333
2 FL 1,503,991,028
Run Code Online (Sandbox Code Playgroud)
因此,结果数据结构应如下所示:
ID STATE (Max Value)
1 FL
2 AL
Run Code Online (Sandbox Code Playgroud)
佛罗里达州和阿拉巴马州的ID群体价值最高.
任何帮助将不胜感激.我确实在这里找到了答案,但无法让答案对我有用.
我试图使用具有布尔条件的断点来调试VS2010中的程序.这个特定的断点非常缓慢,使我的程序运行速度比无条件或使用常规无条件断点慢几百倍.
我的问题是,这是视觉工作室的常见问题,我不敢相信调试器会这么慢吗?布尔表达式非常简单,它只是说在for循环中i == x时打破程序.
任何帮助赞赏,因为它使调试非常痛苦.
谢谢理查德
public static RawNetCalculationResults newCATXLNets(IList<Loss> RawLosses, IList<ReinsuranceProgramme> Programme) //Loss contains the properties Year, EventID, Loss Value
{
List<Recoveries> NetRawLosses = new List<Recoveries>(RawLosses.Count * Programme.Count); //Initiate list with required capacity
//Loop over each element in RawLosses List and do some calculations
foreach (var e in RawLosses)
{ //<----BREAK POINT HERE (e.Year == x)
foreach (var layer in Programme.Where(x => x.Type == ReinsuranceType.CATXL))
{
Run Code Online (Sandbox Code Playgroud) 我正在尝试保存一个在 IPython 内联中工作正常的图形,但没有将包含轴和标题的图形保存到磁盘。
我在 matplotlibrc 中默认使用 TKAgg 后端
任何想法这里可能会出现什么问题?我已经清楚地设置了 xlabel 和刻度线在 IPython 内嵌图中正常工作。
import matplotlib.pylab as plt
x = [1,2,3,3]
y = map(lambda(x): x * 2, x)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_title("bleh")
ax.set_xlabel("xlabel")
ax.plot(x, y, 'r--')
fig.savefig("fig.png")
Run Code Online (Sandbox Code Playgroud)
只需使用基本的JDBC接口即可使用Scala读取一些数据.在F#中(使用System.Data.SqlClient命名空间),我们可以执行类似这样的操作,从数据库返回不可变列表.
let rs = cmd.ExecuteReader()
[while rs.Read() do yield rs.GetInt32(1)]
Run Code Online (Sandbox Code Playgroud)
在Scala中,这被证明更加困难,据我所知,没有像F#这样的"同时"理解.实际上,我想在Scala中做一些接近F#的事情,而不必使用可变变量 - 如果只是因为它们看起来很难看并添加到代码行中.
这样的东西现在似乎在我的Scala代码中很常见:
var result = Seq.empty[Int]
val rs = stmt.executeQuery()
while (rs.next()) {
result = result :+ rs.getInt(1) }
Run Code Online (Sandbox Code Playgroud) 我正在使用HURDAT数据集绘制飓风轨迹.我目前在R中生成了一个SpatialPointsDataFrame对象,它在2004年看起来像这样.
> str(cluster.2004.sdf)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 2693 obs. of 4 variables:
.. ..$ Sid : int [1:2693] 1331 1331 1331 1331 1331 1331 1331 1331 1331 1331 ...
.. ..$ clusterid: num [1:2693] 2 2 2 2 2 2 2 2 2 2 ...
.. ..$ name : Factor w/ 269 levels "","ABBY ",..: 6 6 6 6 6 6 6 6 6 6 ...
.. ..$ WmaxS : num [1:2693] 78.9 …
Run Code Online (Sandbox Code Playgroud) 在C#中,我使用sql脚本将数据添加到List中,其中T将是一个具有映射到sql脚本的字段/属性的类.
我怎么能在F#中做到这一点?这篇文章以标准方式使用存储过程.
using (conn)
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("dbo.query_here", conn))
{
cmd.CommandText = "dbo.query_here";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandTimeout = 600;
cmd.Parameters.Add(new SqlParameter("@x1", Convert.ToString(x)));
cmd.Parameters.Add(new SqlParameter("@y1", y));
cmd.Parameters.Add(new SqlParameter("@z1", z));
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MyListOfClasses.Add(new MyDataClass(reader.GetInt32(reader.GetOrdinal("x"))
reader.GetDouble(reader.GetOrdinal("y")),
reader.GetDouble(reader.GetOrdinal("a")),
reader.GetDouble(reader.GetOrdinal("b"))));
}
reader.Close();
}
conn.Close();
Run Code Online (Sandbox Code Playgroud)
我意识到F#并不像这样直截了当,但我需要以类似的方式将这些数据放入F#列表中.也更喜欢那些本质上不起作用的建议,并遵循与C#代码类似的模式.
在之前的一个帖子中有人建议使用记录,但这与SqlDataReader无关.最好有一个类列表,这样我就可以在每个项目上使用getter和setter.
我应该在"为什么不只是使用C#"的不可避免的评论之前添加.很明显我可以使用C#,但我正在探索在F#中编写算法的可能性,为此我需要从SQL Server获取原始数据.
我正在寻找解决DefaultIfEmpty()
扩展方法在LINQ外连接中使用时不获取空值的问题的解决方案.
代码如下:
var SummaryLossesWithNets = (from g in SummaryLosses
join n in nets
on g.Year equals n.Year into grouping
from x in grouping.DefaultIfEmpty()
select new
{
Year = g.Year,
OEPGR = g.OccuranceLoss,
AEPGR = g.AggregateLoss,
OEPNET = ((x.OEPRecovery == null) ? 0 : x.OEPRecovery),
AEPNET = ((x.AEPRecovery == null) ? 0 : x.AEPRecovery),
});
Run Code Online (Sandbox Code Playgroud)
在List SummaryLosses中,我希望加入到表'nets'中有多年的数据,其中包含多年的子部分.假设x是一个空值,我假设是因为SummaryLosses中的年份与网络中的年份不匹配会在分组列表中创建空值.
如何在这里检查空值?正如您所看到的,我试图在x的属性上检查null,但由于x为null,因此不起作用.
亲切的问候Richard
与C#相比,这个问题更多地与F#的冗长和清晰度有关.一个相对较小的问题,但是我写的数据库查询越来越烦人.
在C#中,我可以使用LINQ和Entity Framework执行以下操作:
var q = (from row in db.LAYERS
where row.LIST1.Field1 == PARAM
select new MyClass( row.field1, row.field2, row.field3, row.field4)).ToList()
Run Code Online (Sandbox Code Playgroud)
关键在于我只是在查询本身内构建一个新的类列表.而在F#中,这似乎不起作用,为了得到相同的结果,我正在做这样的事情:
query { for row in db.LAYERS do
where (row.LIST1.Field1 = PARAM)
select row.field1, row.field2, row.field3, row.field4 }
|> Seq.map (fun row -> new MyClass(row.field1, row.field2, row.field3, row.field4)
Run Code Online (Sandbox Code Playgroud)
F#要求我在查询序列上做一个映射来获取我想要的列表.
我有一个F#类列表,我使用属性来访问数据(我使用的是用C#开发的库).我想将一个属性分组,然后对结果元组的第二项中的每个属性应用单独的函数.
例:
let grouped = list |> Seq.groupBy (fun x -> x.Year) //group by the year property. Results in Seq<int * seq<myClass>>
|> Seq.map (fun (a, b) -> (a, //How to map generic functions to each remaining property in the second tuple?
Run Code Online (Sandbox Code Playgroud)
希望这对某人有意义.我的第二个元组项是groupBy产生的seq.MyClass中的每个剩余属性都需要具有适用于它的不同功能.在过去总结一个属性,我刚刚做了类似的事情:
|> Seq.map (fun (a, b) -> (a, b |> Seq.SumBy (fun x -> x.myProperty)))
Run Code Online (Sandbox Code Playgroud)
我想使用Seq.map为几个属性做这样的事情.
非常感谢任何帮助,理查德